哪个App.config是最新的?

时间:2014-07-06 18:42:11

标签: c# visual-studio-2013

我正在运行针对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“正确”?

3 个答案:

答案 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中可能更有意义。