我有一个应用程序的自定义.NET插件,我正在尝试为插件的配置文件创建configSections。问题是我无法读取该部分如果使用OpenMapperExeConfiguration / OpenExeConfiguration加载配置。
这是我的配置文件(MyTest.dll.config)
<configuration>
<configSections>
<section name="test" type="MyTest, Test.ConfigRead"/>
</configSections>
<test>
..Stuff here
</test>
<appSettings>
<add key="uri" value="www.cnn.com"/>
</appSettings>
</configuration>
这是我访问测试configSection的代码示例
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = Assembly.GetExecutingAssembly().Location + "config";
Configuration applicationConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap,ConfigurationUserLevel.None);
//Using OpenExeConfiguration doesnt help either.
//Configuration applicationConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
//Accessing test section
applicationConfig.GetSection("test");
//Accessing AppSettings works fine.
AppSettingsSection appSettings = (AppSettingsSection)applicationConfig.GetSection("appSettings");
appSettings.Settings["uri"].Value;
如图所示appsettings值可以很好地读取。是否可以在主应用程序的配置文件以外的任何其他配置中使用configSections?
答案 0 :(得分:0)
配置设置适用于应用程序(app.config位于应用程序的根目录,用于.EXE,Web根目录用于Web应用程序)和计算机(machine.config位于[System Root] \ Microsoft.NET \ Framework [CLR Version] \ CONFIG)级别。
使用的唯一其他配置文件是策略配置文件,该文件用于创建程序集版本控制策略,并通过使用AL工具链接到程序集。这显然是你不想做的事情。
尝试将add in的config部分合并到当前应用程序的config部分中,以创建一个应用程序级配置文件,或者将它们放在machine.config文件中。
答案 1 :(得分:0)
你错过了'。'定界符?
fileMap.ExeConfigFilename = Assembly.GetExecutingAssembly().Location + "config";
添加'。':
fileMap.ExeConfigFilename = Assembly.GetExecutingAssembly().Location + ".config";
答案 2 :(得分:0)
这不像您在问题中提到的那样起作用。
您可能会感觉到您可以加载DLL.Config文件,但是应用程序未加载该文件,但由于您在应用程序app.config中具有相同的appsettings部分,因此它可能正在工作。默认情况下,每个应用程序域都有一个配置文件,并且大多以exe命名(因此名称为 applicationname.exe.config 。
默认情况下,这是.net框架加载的文件,用于从中读取配置。 因此,我不建议维护.dll.config文件
现在,您有两种选择来实现您想要的目标:
选项1:您可以为每个ConfigurationSection维护单独的配置文件
从ConfigurationSection继承的每个类都有一个名为“ configSource”的属性。在主application.exe.config中,您可以指定一个自定义部分,如下所示:
<CustomSection configSource="{relative file name}" />
<appSettings file = "relative file name" />
这样,您可以将配置部分保留在多个配置文件中,并且仍然可以使用常规的system.configuration语法访问它们。
有关更多详细信息,请参见this。
选项2:更改默认exe
默认配置文件的名称为application.exe.config。 可以使用以下语法进行更改
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path);
这样,您可以将任何其他xml文件设置为程序的配置文件。
请注意,在首次调用Configuration类之前(即在系统读取配置文件之前),您必须调用此SetData方法。您可以将.dll.config设置为应用程序配置文件,并且可以从此处读取所有配置部分。有关选项2的更多详细信息,请参见this。
希望这会提供足够的信息。