ConfigurationManager.AppSettings - 如何修改和保存?

Hou*_*man 73 .net c# settings configurationmanager appsettings

这可能听起来太琐事了,而且我做了与文章中建议的相同的事情,但它没有按预期工作.希望有人能指出我正确的方向.

我想保存每个AppSettings的用户设置.

一旦Winform关闭,我触发:

conf.Configuration config = 
           ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

if (ConfigurationManager.AppSettings["IntegrateWithPerforce"] != null)
    ConfigurationManager.AppSettings["IntegrateWithPerforce"] = 
                                           e.Payload.IntegrateCheckBox.ToString();
else
    config.AppSettings.Settings.Add("IntegrateWithPerforce", 
                                          e.Payload.IntegrateCheckBox.ToString());

config.Save(ConfigurationSaveMode.Modified);
Run Code Online (Sandbox Code Playgroud)

因此,当条目第一次不存在时,它只会创建它,否则它将修改现有条目.然而,这并不节省.

1)我做错了什么?

2)我希望在哪里再次保存应用程序设置的用户设置?是在Debug文件夹中还是在C:\ Documents and Settings\USERNAME\Local Settings\Application Data文件夹中?

Mar*_*rek 69

有关如何更改app.config文件中appSettings部分中的值:

config.AppSettings.Settings.Remove(key);
config.AppSettings.Settings.Add(key, value);
Run Code Online (Sandbox Code Playgroud)

做的工作.

当然,更好的做法是设置类,但这取决于你追求的是什么.

  • 在看了国内外三个kajillion AppSettings修改思路之后,这是最简单/最好的,并且(至关重要)即使用户破坏<appSettings>节点也能工作 (4认同)

Wah*_*tar 61

我知道我迟到了:)但这是我怎么做的:

public static void AddOrUpdateAppSettings(string key, string value)
{
    try
    {
        var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        var settings = configFile.AppSettings.Settings;
        if (settings[key] == null)
        {
            settings.Add(key, value);
        }
        else
        {
            settings[key].Value = value;
        }
        configFile.Save(ConfigurationSaveMode.Modified);
        ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
    }
    catch (ConfigurationErrorsException)
    {
        Console.WriteLine("Error writing app settings");
    }
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看MSDN

  • 上面要注意的一个主要问题是,如果您是从调试器(在Visual Studio中)运行此文件,则每次构建时app.config文件都会被覆盖。最好的测试方法是构建应用程序,然后导航到输出目录并从此处启动可执行文件。---来自http://vbcity.com/forums/t/152772.aspx (2认同)

Tom*_*son 39

不想<appSettings><customUserSetting>部分.使用(Web)ConfigurationManager读取和写入要容易得多.ConfigurationSection,ConfigurationElement和ConfigurationElementCollection要求您派生自定义类并实现自定义ConfigurationProperty属性.对于仅仅是日常生活的IMO而言太过分了.

以下是读取和写入web.config的示例:

using System.Web.Configuration;
using System.Configuration;

Configuration config = WebConfigurationManager.OpenWebConfiguration("/");
string oldValue = config.AppSettings.Settings["SomeKey"].Value;
config.AppSettings.Settings["SomeKey"].Value = "NewValue";
config.Save(ConfigurationSaveMode.Modified);
Run Code Online (Sandbox Code Playgroud)

之前:

<appSettings>
  <add key="SomeKey" value="oldValue" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)

后:

<appSettings>
  <add key="SomeKey" value="newValue" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)


Dan*_*ann 23

也许你应该看看添加一个设置文件.(例如App.Settings)创建此文件将允许您执行以下操作:

string mysetting = App.Default.MySetting;
App.Default.MySetting = "my new setting";
Run Code Online (Sandbox Code Playgroud)

这意味着您可以编辑然后更改项目,其中项目是强类型的,最重要的是......在部署之前,您不必触摸任何xml!

结果是应用程序或用户上下文设置.

查看设置文件的"添加新项"菜单.


Omi*_* S. 23

关于win表单的基本问题是解决方案:(我只是通过user1032413将代码更改为rflect windowsForms设置)如果它是一个新密钥:

Configuration config = configurationManager.OpenExeConfiguration(Application.ExecutablePath); 
config.AppSettings.Settings.Add("Key","Value");
config.Save(ConfigurationSaveMode.Modified);
Run Code Online (Sandbox Code Playgroud)

如果密钥已存在:

Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
config.AppSettings.Settings["Key"].Value="Value";
config.Save(ConfigurationSaveMode.Modified);
Run Code Online (Sandbox Code Playgroud)


Jus*_*tin 7

请在保存电话后尝试添加此项.

ConfigurationManager.RefreshSection( "appSettings" );
Run Code Online (Sandbox Code Playgroud)


小智 6

请记住,ConfigurationManager只使用一个app.config - 一个在启动项目中.

如果你将一些app.config放到解决方案A并从另一个解决方案B中引用它,那么如果你运行B,将忽略来自A的app.config.

所以例如单元测试项目应该有自己的app.config.