C# 为什么在运行时不考虑我对App.config中AppSettings的更改?(控制台应用程序)

C# 为什么在运行时不考虑我对App.config中AppSettings的更改?(控制台应用程序),c#,.net,app-config,configurationmanager,C#,.net,App Config,Configurationmanager,我有一个控制台应用程序,它有自己的App.config 我需要不时更改部分中的一些值 我的问题是,当我在bin/debug文件夹中执行exe时,它会正确获取相关的appsettings。但当我编辑和更改某些键/值对的值并重新运行exe时,它仍然读取原始值 (所谓重新运行,是指通过调用MyTool.exe在命令promt上运行应用程序) 我试着打电话 ConfigurationManager.RefreshSection("appSettings"); 在我的主要方法的开始。但是没有帮助 你能给

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

我需要不时更改部分中的一些值

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


(所谓重新运行,是指通过调用MyTool.exe在命令promt上运行应用程序)

我试着打电话

ConfigurationManager.RefreshSection("appSettings");
在我的主要方法的开始。但是没有帮助

你能给个建议吗? 谢谢

但当我编辑和更改一些键/值对的值并重新运行 exe,它仍然读取原始值

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

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

App.config用于存储不应更改的配置值。如果需要动态更改配置值,则应使用其他存储机制:文件、数据库等

但是,
ConfigurationManager.RefreshSection(“appSettings”)方法应该可以工作。修改
AppName.exe.config
文件后,调用此方法,然后使用
ConfigurationManager.AppSettings[“someKey”]重新提取所需的值它将返回新值

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

是否保存配置文件?

是否在IDE中编辑app.config,还是直接在调试文件夹的BIN/DEBUG文件夹中编辑exe.config。不在IDE中。IDE中app.config的Copy to output目录的属性值是多少?只要在代码中做任何更改后点击F5就行了。只需重新生成app.config中的新值,然后点击F5,即可在
bin\debug
folderI agree下的*.config文件中更新。但如果我真的不想实现我的要求呢。可能吗?(+1表示最佳实践建议)通过重新运行,我的意思是通过调用MyTool.exe在命令promt上运行应用程序。在应用程序运行时,谁将修改此文件?应用程序本身或其他外部进程?好的。我发现了问题,这是我的错。输出目录包含App.Config和MyApp.exe.Config。我改为修改App.config。感谢提及:)同样值得一提的是,如果您在Visual Studio中的调试器下运行,则需要更新bin文件夹中的
MyApp.vshost.exe.config
,并打开正确的生成路径(例如调试、发布等)。注意到这一点是因为我有一个“我很傻”的时刻。