如何让ConfigurationManager从多个文件加载应用程序设置?

时间:2009-07-28 19:34:50

标签: c# .net configuration-files configurationmanager

我正在编写与第三方应用程序互操作的应用程序。此应用程序通过DLL中的方法向开发人员公开API。前一段时间,这个应用程序的供应商开始将他们自己的.NET组件集成到他们的程序中,当他们这样做时,他们决定他们的组件应该使用ConfigurationManager来获取运行时的设置。

这意味着:他们的计划foo.exe调用fooengine.dll,并从foo.exe.config读取其设置。我的计划bar.exe也会调用fooengine.dll,并从bar.exe.config读取其设置。

嗯,这是完全错误的。但是我该如何解决呢?

简单的解决方法是在foo.exe.config中复制bar.exe.config的设置。这会奏效,但它是愚蠢的。这意味着从管理角度来看,必须在N个不同的文件中维护给定的设置。这迟早会失败。

我尝试在配置文件的configSource部分添加appSettings属性。 (实际上,我正在使用applicationSettings部分进行设置,并且他们正在使用appSettings部分,因此我可以直接从其他文件中获取该部分。)但是ConfigurationManager不喜欢这样:它希望configSource中的路径不仅仅是相对于低于我程序的目录。

我可以将他们的设置文件读取到XmlDocument,然后自己设置。但是现在我将我的代码与他们的实现紧密结合起来;如果他们推出了一个新版本,将设置移动到applicationSettings部分(这是他们应该现在是2009年),我的代码将会中断。

还有另一种出路吗?

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

好的,我想我找到了答案,至少对于我这个问题的特定版本。

.NET 2.0 ConfigurationManager支持file元素上的appSettings属性。这使您可以从外部文件中获取该元素的内容。所以我所做的是:

  1. appSettings中剪切foo.exe.config元素并将其粘贴到该目录中的另一个文件中,例如appSettings.xml

  2. foo.exe.config添加新元素:<appSettings file="appSettings.xml"/>

  3. 将元素添加到bar.exe.config<appSettings file="c:\program files\foo\appSettings.xml"/>

  4. 这很有效。但它只能起作用,因为我的程序根本不使用appSettings