App.Config键不会修改

时间:2013-06-06 19:16:45

标签: c# app-config

我尝试过在SatackOverFlow上找到的这两种方法。这些都不适合我。首先看看我的代码:

private void button1_Click(object sender, EventArgs e)
{
       Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
       KeyValueConfigurationCollection settings = config.AppSettings.Settings;

       settings.Remove("Valor1");
       settings.Add("Valor1", "NewValue");

       //save the file
       config.Save(ConfigurationSaveMode.Modified);

       //reload the section you modified            ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name);
}

并且:

private void button1_Click(object sender, EventArgs e)
{
            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            KeyValueConfigurationCollection settings = config.AppSettings.Settings;

            //Update SaveBeforeExit
            settings["Valor1"].Value = "NewValue";

            //save the file
            config.Save(ConfigurationSaveMode.Modified);

            //reload the section you modified
            ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name);
}  

我想要什么
我想在运行时更改App.Config的值。

为什么我要这个?
我正在使用RFID卡,我需要能够在运行时更改一些配置。这些配置可能因每个客户而异?

怎么了?
好吧,两种方法,它都会在那时更改值,但是当我重新调试应用程序时,该值与更改之前的值相同。

为什么呢?有什么我可以做的吗?

即使我尝试REMOVEADD一个键,它仍然是相同的值。所以我无法以编程方式删除密钥?

2 个答案:

答案 0 :(得分:1)

为什么不使用Setting而不是app.config商店?它将具有初始值,但是一旦保存了值,它将保留/重新加载该值,即使在调试会话中也是如此。

在您的应用中,您可以

var s = new Settings();
s.Setting = "set to new value";
s.Save();

通过单击左侧的“设置”选项卡,从项目的属性窗口添加VS2010中的设置。

设置文件用于生成以ApplicationSettingBase为基类的cs类。

internal sealed partial class Settings : ApplicationSettingsBase {

    private static Settings defaultInstance = 
        ((Settings)(ApplicationSettingsBase.Synchronized(
        new Settings())));

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

    [UserScopedSettingAttribute()]
    [DebuggerNonUserCode()]
    [DefaultSettingValueAttribute("if no user setting is present")]
    public string Setting {
        get {
            return ((string)(this["Setting"]));
        }
        set {
            this["Setting"] = value;
        }
    }
}

答案 1 :(得分:0)

如果您正在成功更改配置文件,那么您的问题是应用程序没有循环并拉入新配置。你可以杀死正在运行的实例并重启吗?