7

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

这意味着:他们的程序 ,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 年的位置),我的代码将会中断。

还有其他方法吗?

4

2 回答 2

3

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

.NET 2.0ConfigurationManager支持元素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

于 2009-07-28T21:37:29.747 回答
2

你可以只加载他们的配置文件

于 2009-07-28T19:38:20.983 回答