我正在运行针对4.5的Visual Studio 12.0。我正在运行VS Express。我的App.config看起来像这样:
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="ConfigMgrTest2.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<applicationSettings>
<ConfigMgrTest2.Properties.Settings>
<setting name="exampleAppSetting" serializeAs="String">
<value>example app setting data</value>
</setting>
</ConfigMgrTest2.Properties.Settings>
</applicationSettings>
</configuration>
这允许我使用此语法来访问值:
string value = ConfigMgrTest2.Properties.Default.exampleAppSetting;
从我的研究中可以看出,我的App.config中应该有一个“appSettings”部分,它使用键值对,如下所示:
<appSettings>
<add key="exampleAppSetting" value="example app setting data"/>
</appSettings>
这将允许我访问这样的值:
string key = "exampleAppSetting";
var appSettings = System.Configuration.ConfigurationManager.AppSettings;
string value = appSettings[key];
使用我的App.config,对ConfigurationManager.AppSettings属性的任何调用显然都返回null。
问题是,哪个版本的App.config“正确”?
答案 0 :(得分:1)
两者都是正确的和最新的。
在您的示例中,
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="ConfigMgrTest2.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
您只是使用System.Configuration.ApplicationSettingsGroup来定义新的配置组applicationSettings
。
如果你要将它添加到配置文件中:
<appSettings>
<add key="Alfa" value="42"/>
</appSettings>
您仍然可以使用以下方法检索它:
var alfa = ConfigurationManager.AppSettings["Alfa"];
<强>更新强>
完整的App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="ConfigMgrTest2.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<applicationSettings>
<ConfigMgrTest2.Properties.Settings>
<setting name="exampleAppSetting" serializeAs="String">
<value>example app setting data</value>
</setting>
</ConfigMgrTest2.Properties.Settings>
</applicationSettings>
<appSettings>
<add key="Alfa" value="42"/>
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
就个人而言,我更喜欢自定义配置,因为它们允许我提供默认值,以及强制使用。
答案 1 :(得分:1)
我不确定哪个版本是正确的,这可能取决于您的实际使用情况,但如果您的app.config
中的已发布部分如下所示
<appSettings>
<add key="exampleAppSetting" value="example app setting data"/>
</appSettings>
然后您需要像下面一样访问它。您需要提及要为其获取值的KEY
。
ConfigurationManager.AppSettings["exampleAppSetting"]
答案 2 :(得分:1)
假设您已创建桌面应用程序(WinForms或WPF),App.config文件将自动复制到输出文件夹以及可执行文件,并重命名为YourApplication.exe.config。您可以在此文件中包含<appSettings>
部分:
<configuration>
<appSettings>
<add key="exampleAppSetting" value="example app setting data"/>
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
然后你就可以像这样访问这个值:
var appSettings = System.Configuration.ConfigurationManager.AppSettings;
string value = appSettings["exampleAppSetting"];
如果您有一些复杂的配置属性,您可能更喜欢使用自定义配置部分。在这种情况下,将它们移动到单独的配置文件write a custom section
中可能更有意义。