添加包含新部分

时间:2016-02-03 16:51:30

标签: c# .net config app-config

我的应用程序使用App.config外部的AppSettings.config和ConnectionStrings.config运行。我想添加另一个配置文件GlobalSettings.config,我将在其中提取我不希望包含在AppSettings.config中的信息。

在准备提出这个问题时,我阅读了以下SO问题,实施了建议的解决方案,并且没有找到解决方案:

运行时,我收到一个{“配置系统初始化失败”}异常,其内部消息为“无法识别的配置部分globalSettings”。

以下是我当前的文件。删除App.config的<globalSettings file="GlobalSettings.config"/>行可以使我的应用程序成功运行。

我已尝试根据上述链接的建议重新格式化GlobalSettings.config文件。根据我的阅读,我的理解是它应该像在AppSettings.config中声明一个新的configSection一样工作。从我的经历来看,情况似乎并非如此。

此时,应用程序中没有代码可以访问GlobalSettings.config,因为它在运行时中断。

赞赏参考材料的任何特定方向和/或方向。如果我可以提供更多信息,请告诉我。

App.config中:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
  <appSettings file="AppSettings.config"/>
  <connectionStrings configSource="ConnectionStrings.config"/>
  <globalSettings file="GlobalSettings.config"/>
</configuration>

GlobalSettings:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="globalSettings"
             type="System.Configuration.AppSettingsSection" requirePermission="false" />
  </configSections>

  <globalSettings>
    <add key="key" value="keyValue" />
  </globalSettings>

</configuration>

1 个答案:

答案 0 :(得分:1)

阅读以下内容后,我开发了一个可行的解决方案:

更新了App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="globalSettings" type="System.Configuration.AppSettingsSection"/>
  </configSections>
  <appSettings file="AppSettings.config"/>
  <connectionStrings configSource="ConnectionStrings.config"/>
  <globalSettings file="GlobalSettings.config"/>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
</configuration>

更新了GlobalSettings.config:

<globalSettings>
  <add key="key" value="keyValue" />
</globalSettings>

功能代码:

private void RetrieveKey()
        {
            var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            AppSettingsSection globalSettingSection = (AppSettingsSection)config.GetSection("globalSettings");
            key = globalSettingSection.Settings["key"].Value;
        }

我发现您需要在App.config中定义新部分,而不是在您正在创建的配置文件中。该部分的类型也很重要。您可以使用以下其中一项:

  • type="System.Configuration.AppSettingsSection"
  • type="System.Configuration.IgnoreSectionHandler
  • type="System.Configuration.NameValueSectionHandler"

我发现type="System.Configuration.AppSettingsSection"最有用,因为它使配置最像AppSettings.config文件。

如果您有任何可以提高效率的更改,请告诉我。