我正在编写与第三方应用程序互操作的应用程序。此应用程序通过 DLL 中的方法向开发人员公开 API。前一段时间,这个应用程序的供应商开始将他们自己的 .NET 组件集成到他们的程序中,当他们这样做时,他们决定他们的组件应该使用 ConfigurationManager
在运行时获取设置。
这意味着什么:他们的程序 foo.exe
调用 fooengine.dll
,并从 foo.exe.config
中读取其设置>。我的程序 bar.exe
也调用 fooengine.dll
,它从 bar.exe.config
读取它的设置。
嗯,那完全是错误的。但是我该如何解决呢?
简单的解决方法是在 bar.exe.config
中复制 foo.exe.config
的设置。这会起作用,但它很愚蠢。这意味着从管理的角度来看,必须在 N 个不同的文件中维护给定的设置。那迟早会失败。
我尝试在配置文件的 appSettings
部分放置一个 configSource
属性。 (碰巧的是,我正在使用 applicationSettings
部分作为我的设置,而他们正在使用 appSettings
部分作为他们的设置,所以我可以接受简单地获取该部分来自不同的文件。)但是 ConfigurationManager
不喜欢这样:它希望 configSource
中的路径不仅相对于而且低于我的程序目录。
我可以将他们的设置文件实际读取到 XmlDocument
中,然后自己进行设置。但现在我正在将我的代码与它们的实现紧密耦合;如果他们推出一个新版本,将设置移动到 applicationSettings
部分(现在是 2009 年,他们应该在这个位置),我的代码就会出错。
还有别的办法吗?
最佳答案
好吧,我想我已经找到了答案,至少对于我这个问题的特定版本。
.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
完全没有。
关于c# - 如何让 ConfigurationManager 从多个文件加载应用程序设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1196290/