为什么我在App.config中对AppSettings的更改在运行时没有考虑到? (控制台应用)

时间:2012-07-13 08:39:12

标签: c# .net app-config configurationmanager

我有一个控制台应用程序,它有自己的App.config。

我需要不时更改部分值。

我的问题是,当我在bin / debug文件夹中执行exe时,它会正确获取相关的appsettings。但是当我编辑和更改某些键/值对的值并重新运行exe时,它仍然会读取原始值。

(通过RE-RUN我的意思是通过调用MyTool.exe在命令promt上运行应用程序)

我试着打电话

ConfigurationManager.RefreshSection("appSettings");

在我的Main方法的开头。但没有帮助。

你能告诉我吗? 感谢

2 个答案:

答案 0 :(得分:33)

  

但是当我编辑和更改某些键/值对的值和RE-RUN时   exe,它仍然读取原始值。

取决于你如何重新运行这个exe。如果您在Visual Studio中执行此操作,通过按 F5 ,VS只需将项目中的app.config文件复制到输出并将其重命名为AppName.exe.config。因此,如果您希望将更改考虑在内,则必须修改AppName.exe.config(而非App.config),然后从Windows资源管理器中运行可执行文件。

这就是说,App.config只被读取和解析一次。应用程序启动时。然后缓存这些值,以避免每次应用程序请求某些值时都进行昂贵的XML解析。

App.config旨在存储不应更改的配置值。如果需要动态更改配置值,则应使用其他存储机制:file,database,...

ConfigurationManager.RefreshSection("appSettings");方法应该有效。修改AppName.exe.config文件后,调用此方法,然后使用ConfigurationManager.AppSettings["someKey"];重新获取所需的值,该值应返回新值。

答案 1 :(得分:0)

  Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// change ConnectionString in App.Config for Entity FrameWork Object....
 //..... 
config.Save();

你保存配置文件吗?