ConfigurationManager不保存设置
这是我正在使用的代码:
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."); } }
现在,这些设置是持久的,但是当我closures应用程序并按F5再次运行时,这些值将被还原为input到app.config文件中的内容。 有什么build议么?
我想你应该调用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类
当您使用F5运行应用程序时,
- 你的代码被编译,
- 将可执行文件复制到源代码目录的
bin
或bin\Debug
子目录中, - 您的
app.config
将作为yourexecutable.exe.config
复制到该目录中 - 您的可执行文件在该目录中启动。
因此,您的应用程序使用bin
或bin\Debug
目录中的yourexecutable.exe.config
, ConfigurationManager
保存更改,而不是在源代码目录中。 在部署应用程序之后,这不会是一个问题,因为这样,更改将转到部署目录中的yourexecutable.exe.config
,这正是您想要的。
除了Appetere对第二个答案的评论:
另外请注意,如果您正在debugging(并且未禁用vshost进程),那么当您的应用程序停止时,yourexecutable.vshost.exe.config将再次被yourexecutable.exe.configreplace。
所以再一次,你可能看不到你之后做出的任何改变! (如果您在debugging时停止了断点,并在修改并调用刷新部分后查看文件,则会看到您的更改)。
如果您正在debugging查找设置的程序,并且如果不存在,则会写入该程序,这非常令人困惑。 即使你预先警告你不要期望第二次运行这个程序的时候,你也可以期待它在程序的第一次运行之后,在第二次运行之前就在那里了…唉!
没有什么可担心的,因为当应用程序被部署或直接从bin启动时,正如其他人已经声明的那样,
但是,如果您正在debugging程序并决定首次使用应用程序设置,并且避免手写XML,那么您可能会陷入“陷阱”中,您决定从代码开始,然后将程序写一个设置…得到所有的东西,然后可能再添加几个。
- 在.NET桌面应用Settings.settings与app.config
- 修复:全局元素的“configuration”已经被声明
- App.Config转换为Visual Studio 2010中不是Web项目的项目?
- Visual Studio中开发人员特定的app.config / web.config文件
- 什么是C#.NET中的App.config? 如何使用它?
- 在app.config中encryption连接string
- 如何在app.config中创build自定义configuration部分?
- 什么'useLegacyV2RuntimeActivationPolicy'在.NET 4configuration?