2

我开始在 VS2010 中向我的 C# 项目添加设置,方法是在 Project -> Properties -> Settings 选项卡中添加行。在属性下自动生成了一个 Settings.settings 文件(带有 Settings.Designer.cs 文件)。

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

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

更新:

我从我的项目中完全删除/删除了 app.config 和 Settings 文件,然后在项目属性中重新添加了一项设置,以便从头开始重新创建它。当我再次构建项目时,这一次 ProjectName.exe.config 文件位于\bin 文件夹中。但是我的代码得到了相同的结果: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 文件。

4

3 回答 3

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;
            }
        }
    }
}
于 2012-12-05T23:33:34.477 回答
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您项目文件夹中的一个)。Settings类将为您添加到 Project -> Properties -> Settings 选项卡的所有行提供强类型属性:

var value = Settings.Default.NameOfSetting;
于 2012-12-05T23:32:34.880 回答
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>
于 2012-12-05T23:35:22.327 回答