Rob*_*ney 7 .net c# configurationmanager configuration-files
我正在编写与第三方应用程序互操作的应用程序.此应用程序通过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年的版本),我的代码将会中断.
还有另一种出路吗?
好吧,我想我已经找到了答案,至少对于我这个问题的特定版本来说是这样。
.NET 2.0ConfigurationManager支持元素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但它之所以有效,是因为我的程序根本不使用。