【问题标题】:Configuration system failed to initialize after adding a new external config file containing a new section添加包含新部分的新外部配置文件后,配置系统无法初始化
【发布时间】:2016-05-13 00:01:07
【问题描述】:

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

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

在运行时,我收到 {"Configuration system failed to initialize"} 异常,并带有“无法识别的配置部分 globalSettings”的 innerException 消息。

以下是我当前的文件。删除 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>

全局设置:

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

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

</configuration>

【问题讨论】:

    标签: c# .net config app-config


    【解决方案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 文件。

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

    【讨论】:

      猜你喜欢
      • 2019-08-12
      • 2013-07-22
      • 2010-11-22
      • 2019-01-20
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      相关资源
      最近更新 更多