根据原帖最近的评论,这是我的跟进答案:如果我有多个外部配置文件怎么办?
我的建议是修改配置设置的设计。我假设您有多个类库,每个类库都有自己的一组设置,目前存储在appSettings部分中。在这种情况下,您的配置文件可能看起来像这样:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ClassLibrary1Value1" value="123"/>
<add key="ClassLibrary1Value2" value="234"/>
<add key="ClassLibrary1Value3" value="345"/>
<add key="ClassLibrary2Value1" value="ABC"/>
<add key="ClassLibrary2Value2" value="BCD"/>
<add key="ClassLibrary2Value3" value="CDE"/>
</appSettings>
</configuration>
您访问这些设置的代码可能如下所示:
var appSettings = System.Configuration.ConfigurationManager.AppSettings;
Console.WriteLine(appSettings["ClassLibrary1Value1"]);
Console.WriteLine(appSettings["ClassLibrary1Value2"]);
Console.WriteLine(appSettings["ClassLibrary1Value3"]);
Console.WriteLine(appSettings["ClassLibrary2Value1"]);
Console.WriteLine(appSettings["ClassLibrary2Value2"]);
Console.WriteLine(appSettings["ClassLibrary2Value3"]);
相反,我建议您尝试将每个类库的设置分别放置在其自己的配置部分中。您可以通过修改可执行文件的配置文件来实现此目的,使其看起来像这样:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="classLibrary1" type="System.Configuration.AppSettingsSection"/>
<section name="classLibrary2" type="System.Configuration.AppSettingsSection"/>
</configSections>
<classLibrary1 configSource="ClassLibrary1.dll.config" />
<classLibrary2 configSource="ClassLibrary2.dll.config" />
</configuration>
您的 ClassLibrary1.dll.config 文件看起来会像这样:
<?xml version="1.0" encoding="utf-8" ?>
<classLibrary1>
<add key="Value1" value="123"/>
<add key="Value2" value="234"/>
<add key="Value3" value="345"/>
</classLibrary1>
您的 ClassLibrary2.dll.config 文件应该如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<classLibrary2>
<add key="Value1" value="ABC"/>
<add key="Value2" value="BCD"/>
<add key="Value3" value="CDE"/>
</classLibrary2>
你可以使用以下代码访问这些设置:
var classLibrary1AppSettings = (System.Collections.Specialized.NameValueCollection)System.Configuration.ConfigurationManager.GetSection("classLibrary1");
Console.WriteLine(classLibrary1AppSettings["Value1"]);
Console.WriteLine(classLibrary1AppSettings["Value2"]);
Console.WriteLine(classLibrary1AppSettings["Value3"]);
var classLibrary2AppSettings = (System.Collections.Specialized.NameValueCollection)System.Configuration.ConfigurationManager.GetSection("classLibrary2");
Console.WriteLine(classLibrary2AppSettings["Value1"]);
Console.WriteLine(classLibrary2AppSettings["Value2"]);
Console.WriteLine(classLibrary2AppSettings["Value3"]);