我正在编写与第三方应用程序互操作的应用程序。此应用程序通过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年),我的代码将会中断。
还有另一种出路吗?
答案 0 :(得分:2)
答案 1 :(得分:2)
好的,我想我找到了答案,至少对于我这个问题的特定版本。
.NET 2.0 ConfigurationManager
支持file
元素上的appSettings
属性。这使您可以从外部文件中获取该元素的内容。所以我所做的是:
从appSettings
中剪切foo.exe.config
元素并将其粘贴到该目录中的另一个文件中,例如appSettings.xml
。
向foo.exe.config
添加新元素:<appSettings file="appSettings.xml"/>
。
将元素添加到bar.exe.config
:<appSettings file="c:\program files\foo\appSettings.xml"/>
这很有效。但它只能起作用,因为我的程序根本不使用appSettings
。