我的应用程序使用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>
答案 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文件。
如果您有任何可以提高效率的更改,请告诉我。