我对这个问题有点困惑。
我的情况是我在 C# 中有两个独立的项目:
- 是服务(A)
- 辅助项目 (B)
两者都在单独的解决方案文件中。(A) 有参考 (B) 我感到困惑的是,例如我在 (A) 中有 app.config 文件,所以当我参考时:
ConfigurationManager.AppSettings["XYZ"]
在项目 (B) 中。这是否意味着我正在使用项目 (A) 的 app.config 文件?
我对这个问题有点困惑。
我的情况是我在 C# 中有两个独立的项目:
两者都在单独的解决方案文件中。(A) 有参考 (B) 我感到困惑的是,例如我在 (A) 中有 app.config 文件,所以当我参考时:
ConfigurationManager.AppSettings["XYZ"]
在项目 (B) 中。这是否意味着我正在使用项目 (A) 的 app.config 文件?
是的,ConfigurationManager 类和底层配置文件可用于整个 AppDomain 实例。由于您的库将被服务使用,它成为服务的 AppDomain 的一部分并继承对该配置文件的访问。
如果您希望其他二进制文件(项目 B)拥有它自己的,那么您需要在它自己的 AppDomain 中创建它的一个实例。这比它的价值更麻烦,所以我不会尝试这样做。
任何将使用此库的 AppDomain 都将提供它的配置设置。这意味着,如果库有自己的设置,服务本身不使用,那么您需要确保使用该库的任何可执行文件都存在这些设置。
因此,如果您有一个具有 ProjA(控制台应用程序)、ProjB(WinForms 应用程序)的解决方案,并且它们都使用 ProjC(共享库),请确保 ProjC 正在寻找的设置在 ProjA 和 ProjB 的配置文件中,因为 ProjA 和 ProjB运行时是它们自己的 AppDomain 实例。
你的问题的答案是YES
这里要注意的另一点是,除非您明确复制引用项目的 app.config,否则始终会部署主项目的 app.config 文件(而不是引用的项目)。因此,最好在主项目的 app.config 上完成所有工作,在您的情况下是A
如果我理解正确,您的解决方案中有两个项目
如果是这样的话 - 是的。ConfigurationManager.AppSettings 将从启动项目的配置文件中读取,在你的例子中是项目 A。
但是,如果您有不同的项目独立运行,例如两个不同的服务项目 Service1 和 Service2 都将引用它们各自的 app.config/web.config 文件。