我正在尝试保存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中。
答案 0 :(得分:1)
对于Winforms项目,在编译项目时,app.config
文件将作为<appname>.exe.config
复制到输出目录。对配置所做的任何运行时更改都是对此文件进行的(而不是源代码目录中的app.config
)。这是应与您的应用程序一起分发的文件;如果您使用ClickOnce,此文件将与您的应用程序一起成为部署使用的配置文件。
另外值得注意的是调试目的(暂时这是你的用例),只要你在Visual Studio中运行,修改的实际文件就是<appname>.vshost.exe.config
。您可以通过在VS中运行并检查.vshost.exe.config文件,然后直接从目录运行.exe并监视.exe.config文件来验证这一点。
对于InvalidOperationException
,trying to access the app.config file in a VirtualBox shared folder存在已知问题,但唯一的解决办法似乎是使用本地目录。