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

标签 c# .net configuration-files configurationmanager

我正在编写与第三方应用程序互操作的应用程序。此应用程序通过 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 上的属性元素。这使您可以从外部文件中获取该元素的内容。所以我做的是:

  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"/>

这行得通。但它之所以有效,是因为我的程序没有使用 appSettings完全没有。

关于c# - 如何让 ConfigurationManager 从多个文件加载应用程序设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1196290/

相关文章:

centos - 无法以 Root 身份打开 session

c# - 字节数组未初始化为正确的大小?

c# - 使用 LDAP 进行表单例份验证 "Server is unavailable"错误

c# - 我们如何在两个托管进程之间使用 "Object"的共享内存段共享数据?

asp.net - 使用 web.config 存储设置的替代方法(对于复杂的解决方案)

Java Properties.store 正在删除其他条目

c# - 尝试运行Monotouch-bindings示例Facebook时出错

c# - 可以包含两种类型的项目的列表的模式

c# - 是否有标准算法将重叠对象平衡到桶中?

.net - clr.AddReference 和 clr.ImportExtensions 给出 "expected type, got str"错误