添加包含新部分的新外部配置文件后,配置系统无法初始化
Configuration system failed to initialize after adding a new external config file containing a new section
我的应用程序 运行 在 App.config 外部具有 AppSettings.config 和 ConnectionStrings.config。我想添加另一个配置文件 GlobalSettings.config,我将从中提取我不想包含在 AppSettings.config.
中的信息
在准备提出这个问题时,我阅读了以下 SO 问题,实施了建议的解决方案,但没有找到解决方案:
- Multiple AppSettings files, is it possible?
- Configuration system failed to initialize error while loading a custom section from app.config
- configuration system failed to initialize ==> unrecognized configuration section
- App.Config errors with “Configuration system failed to initialize”
在 运行,我收到一个 {"Configuration system failed to initialize"} 异常,innerException 消息为 'Unrecognized configuration section globalSettings.'
以下是我当前的文件。删除 App.config 的 <globalSettings file="GlobalSettings.config"/>
行允许我的应用程序 运行 成功。
我已尝试根据上述链接的建议重新格式化 GlobalSettings.config 文件。根据我的阅读,我的理解是它应该像在 AppSettings.config 中声明一个新的 configSection 一样工作。从我的经历来看,情况似乎并非如此。
此时,应用程序中没有访问 GlobalSettings.config 的代码,因为它在 运行 时中断。
任何具体方向 and/or 参考 material 的方向表示赞赏。如果我可以提供更多信息,请告诉我。
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>
阅读以下内容后,我制定了一个可行的解决方案:
- Moving a custom configuration group to a separate file
- An error occurred creating the configuration section handler
- How to get the values of a ConfigurationSection of type NameValueSectionHandler
已更新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 文件。
如果您有任何可以提高效率的更改,请告诉我。
我的应用程序 运行 在 App.config 外部具有 AppSettings.config 和 ConnectionStrings.config。我想添加另一个配置文件 GlobalSettings.config,我将从中提取我不想包含在 AppSettings.config.
中的信息在准备提出这个问题时,我阅读了以下 SO 问题,实施了建议的解决方案,但没有找到解决方案:
- Multiple AppSettings files, is it possible?
- Configuration system failed to initialize error while loading a custom section from app.config
- configuration system failed to initialize ==> unrecognized configuration section
- App.Config errors with “Configuration system failed to initialize”
在 运行,我收到一个 {"Configuration system failed to initialize"} 异常,innerException 消息为 'Unrecognized configuration section globalSettings.'
以下是我当前的文件。删除 App.config 的 <globalSettings file="GlobalSettings.config"/>
行允许我的应用程序 运行 成功。
我已尝试根据上述链接的建议重新格式化 GlobalSettings.config 文件。根据我的阅读,我的理解是它应该像在 AppSettings.config 中声明一个新的 configSection 一样工作。从我的经历来看,情况似乎并非如此。
此时,应用程序中没有访问 GlobalSettings.config 的代码,因为它在 运行 时中断。
任何具体方向 and/or 参考 material 的方向表示赞赏。如果我可以提供更多信息,请告诉我。
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>
阅读以下内容后,我制定了一个可行的解决方案:
- Moving a custom configuration group to a separate file
- An error occurred creating the configuration section handler
- How to get the values of a ConfigurationSection of type NameValueSectionHandler
已更新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 文件。
如果您有任何可以提高效率的更改,请告诉我。