以下是我正在使用的代码:
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文件中键入的内容。有什么建议吗?
答案 0 :(得分:50)
我认为你应该调用Save方法
ConfigurationManager.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
修改强>
为了能够保存,您必须使用OpenExeConfiguration方法返回的配置对象
//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
答案 1 :(得分:31)
使用F5运行应用程序时
bin
或bin\Debug
子目录中,app.config
被复制为yourexecutable.exe.config
到该目录,因此,您的应用程序使用yourexecutable.exe.config
或bin
目录中的bin\Debug
,{em>那里 ConfigurationManager
保存更改,不在您的源代码目录中。这在部署应用程序后不会成为问题,因为这样,更改将转到部署目录中的yourexecutable.exe.config
,这就是您想要的。
答案 2 :(得分:0)
继Appetere对第二个答案的评论:
另请注意,如果您正在调试(并且没有禁用vshost进程),那么当您的应用程序停止时,yourexecutable.vshost.exe.config将再次被yourexecutable.exe.config替换。
再一次,您可能看不到之后所做的任何更改! (如果您在调试时停在断点处,并在进行修改并调用刷新部分后查看文件,则会看到您的更改)。
如果您正在调试查找设置的程序,并且如果不存在,则会将其写入,这非常令人困惑。即使您已经预先警告不要在第二次运行程序时期望设置在那里,人们可能会期望它在第一次运行程序之后和第二次运行之前就在那里......唉!
没有什么可担心的,因为当应用程序部署或直接从bin启动时,它就可以正常工作,正如其他人已经说过的那样......
但它有可能落入“陷阱”中。虽然如果您正在调试程序并决定第一次使用“应用程序设置”,并且为了避免手写XML,您决定从代码开始并让程序编写设置......得到所有这些东西,然后可能再添加几个。