VS项目设置正在构建.config文件,没有<appsettings>或<add>元素</add> </appsettings>

时间:2012-12-05 23:26:10

标签: c# app-config configurationmanager settings.settings

我开始在VS2010中为我的C#项目添加设置,方法是在项目中添加行 - &gt;属性 - &gt;设置选项卡。在Properties。

下自动生成了Settings.settings文件(带有Settings.Designer.cs文件)

但是当我尝试访问像ConfigurationManager.AppSettings["NameOfSetting"]这样的代码中的某些设置时,它总是返回null; AppSettings.Count始终为0.此外,我检查了bin文件夹,当我构建项目时,没有MyProjectName.exe.config文件或app.config文件

VS项目可能有什么问题?如何强制它创建.exe.config文件,就像它应该的那样?

更新

我从项目中完全删除/删除了app.config和Settings文件,然后在项目属性中重新添加了一个设置,从头开始重新创建它。当我再次构建项目时,这次在\ bin文件夹中的ProjectName.exe.config文件。但是我的代码获得了相同的结果:ConfigurationManager.AppSettings [“MySetting”]为null,AppSettings.Count = 0。

以下是项目文件夹中自动生成的app.config文件,该文件与在构建中创建的Project.exe.config文件相同:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
        <section name="MyDarnProject.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
</configSections>
<applicationSettings>
    <MyDarnProject.Properties.Settings>
        <setting name="MySetting" serializeAs="String">
            <value>21937058</value>
        </setting>
    </MyDarnProject.Properties.Settings>
</applicationSettings>
</configuration>

我注意到该元素名为applicationSettings,而不是预期的appSettings。设置本身完全不同,有元素和子元素,而不像其他人的例子中的<add key="MySetting" value="21937058"/>。我正在使用Visual Studio Professional 2010,版本10.0.40219.1 SP1Rel

Settings.Designer.cs代码具有与下面给出的示例完全相同的所有内容,除了没有设置与get相关但我不认为这是一个大问题。

[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("21937058")]
public long MySetting {
    get {
        return ((long)(this["MySetting"]));
    }
}

MyProject.Properties.Settings.Default.MySetting可以访问设置值!所以我想我可能不得不这样做;我将考虑一个解决方法,因为我仍然不知道为什么项目没有按照我做过的每个其他项目的方式构建ProjectName.exe.config文件。

3 个答案:

答案 0 :(得分:3)

从这家酒店获取:

YourAppNamespace.Properties.Settings.Default.NameOfSetting

如果仔细查看Settings.Designer.cs文件,可以轻松查看如何引用这些值:

namespace YourAppNamespace.Properties {


    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {

        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

        public static Settings Default {
            get {
                return defaultInstance;
            }
        }

        [global::System.Configuration.UserScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [global::System.Configuration.DefaultSettingValueAttribute("asas")]
        public string NameOfSetting {
            get {
                return ((string)(this["NameOfSetting"]));
            }
            set {
                this["NameOfSetting"] = value;
            }
        }
    }
}

答案 1 :(得分:0)

var value = ConfigurationManager.AppSettings["NameOfSetting"]

将在<appSettings>文件

中查找App.config部分
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="NameOfSetting" value="Foo"/>
  </appSettings>
</configuration>

访问Settings.settings文件使用中的设置(Visual Studio将帮助您解析Settings类的名称空间 - 即项目的Properties文件夹中的名称空间。对于已添加到Project的所有行,Settings类将具有强类型属性 - &gt;属性 - &gt;设置标签:

var value = Settings.Default.NameOfSetting;

答案 2 :(得分:0)

确保 App.config 文件中有 部分

这是一个你可以遵循的例子

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="somesetting" value="7"/>
    <add key="somelocation"  value="abc.txt"/>
  </appSettings>
</configuration>

you read the above using code shown below

string configvalue1 = ConfigurationManager.AppSettings["somesetting"];
string configvalue2 = ConfigurationManager.AppSettings["somelocation"];

如果要访问“设置”中的“属性”,则可以执行此操作

Properties.Settings.Default.<Your_Setting_Name>