下面是我使用的代码:
private void SaveConfiguration()
{
if (txtUsername.Text != "" && txtPassword.Text != "")
{
ConfigurationManager.AppSettings["Username"] = txtUsername.Text;
ConfigurationManager.AppSettings["Password"] = txtPassword.Text;
MessageBox.Show("Su configuracion guardo exitosamente.", "Exito!");
this.Close();
}
else
{
MessageBox.Show("Por favor lleno los campos.", "Error.");
}
}现在,这些设置是持久化的,但是当我关闭应用程序并按F5再次运行它时,这些值将恢复为输入到app.config文件中的值。有什么建议吗?
发布于 2010-11-19 00:00:56
我认为您应该调用Save方法
ConfigurationManager.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");编辑
为了能够保存,必须使用由OpenExeConfiguration方法返回的configuration对象
//Create the object
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//make changes
config.AppSettings.Settings["Username"].Value = txtUsername.Text;
config.AppSettings.Settings["Password"].Value = txtPassword.Text;
//save to apply changes
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");更多参考资料请点击此处ConfigurationManager Class
发布于 2010-11-19 00:02:16
当您使用F5运行应用程序时,
bin或bin\Debug子目录中,app.config作为<代码>D9复制到该目录中,<代码>H210<代码>在该目录中启动可执行文件。<代码>H212<代码>F213因此,您的应用程序使用bin或bin\Debug目录中的yourexecutable.exe.config,ConfigurationManager正是在那里保存更改,而不是保存在您的源代码目录中。在部署应用程序之后,这将不是问题,因为之后,更改将转到部署目录中的yourexecutable.exe.config,这正是您想要的。
发布于 2017-10-20 18:44:06
关于阿佩特里对第二个答案的评论:
还要注意,如果您正在调试(并且没有禁用vshost进程),那么当您的应用程序停止时,yourexecutable.vshost.exe.config将再次替换为yourexecutable.exe.config。
因此,您可能再一次看不到您之后所做的任何更改!(如果您在调试时停在断点处,并在进行修改并调用刷新部分后查看文件,您将看到所做的更改)。
如果您调试的程序查找设置,如果不存在,则写入设置,这是非常令人困惑的。即使你被预先警告不要在第二次运行程序时期望设置在那里,人们可能会期望它在第一次运行程序之后和第二次运行之前就在那里……天哪!
这没什么可担心的,因为当应用程序部署或直接从bin启动时,这一切都可以正常工作,就像其他人已经说过的那样……
但是,如果你正在调试你的程序,并决定第一次使用应用程序设置,并且为了避免手写XML,你决定从代码开始,让程序编写一个设置,那么就有可能落入“陷阱”。获取所有这些内容,然后可能添加更多内容。
https://stackoverflow.com/questions/4216809
复制相似问题