是否可以在从属dll的应用程序配置</configsections>中定义<configsections>

时间:2009-01-15 12:36:02

标签: c# configuration configsection

我有一个应用程序的自定义.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?

3 个答案:

答案 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

希望这会提供足够的信息。