如何在App.config中保存更改?

时间:2015-05-13 15:18:32

标签: c# winforms configuration

我正在尝试保存App.config文件中的设置,但收到InvalidOperationException。我跟着这个例子 MSDN

这是我的代码:

private void button_Update_Click(object sender, EventArgs e)
{
    string Key = textBox_Key.Text.Trim();
    string Value = textBox_Value.Text.Trim();//bug: should use control textBox_NewValue
    if (Key != "" && Value != "")
    {
        try
        {
            // write new value to app.config:
            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            KeyValueConfigurationCollection settings = config.AppSettings.Settings;
            if (settings[Key] == null)
                settings.Add(Key, Value);
            else
                settings[Key].Value = Value;
            //config.Save(ConfigurationSaveMode.Modified); //-->Exception: Method failed with unexpected error code 1.
            config.Save(); //-->Exception: Method failed with unexpected error code 1.
            ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name);
            // feedback:
            textBox_Value.Text = ConfigurationManager.AppSettings[Key];
            textBox_NewValue.Text = "";
        }
        catch (ConfigurationErrorsException exc)
        {
        }//debug breakpoint
        catch (Exception exc)//--> InvalidOperationException
        {
        }//debug breakpoint
    }
    return;
}

在使用并被正在运行的应用程序锁定时,有可能无法更新App.config等文件吗?

如下所述,我的问题似乎与ConfigurationManager.save() fails重复。在本地磁盘上和/或直接运行.exe(不在VS调试模式下),不会发生异常。

不幸的是,我也没有在App.config中看到更新的值,但这似乎是一个无关的问题。

修复我自己的错误后(请参阅上面的评论)我可以确认新值确实是写在非共享磁盘上的文件{app} .exe.config中。

1 个答案:

答案 0 :(得分:1)

对于Winforms项目,在编译项目时,app.config文件将作为<appname>.exe.config复制到输出目录。对配置所做的任何运行时更改都是对此文件进行的(而不是源代码目录中的app.config)。这是应与您的应用程序一起分发的文件;如果您使用ClickOnce,此文件将与您的应用程序一起成为部署使用的配置文件。

另外值得注意的是调试目的(暂时这是你的用例),只要你在Visual Studio中运行,修改的实际文件就是<appname>.vshost.exe.config。您可以通过在VS中运行并检查.vshost.exe.config文件,然后直接从目录运行.exe并监视.exe.config文件来验证这一点。

对于InvalidOperationExceptiontrying to access the app.config file in a VirtualBox shared folder存在已知问题,但唯一的解决办法似乎是使用本地目录。