C# 为什么在运行时不考虑我对App.config中AppSettings的更改?(控制台应用程序)
我有一个控制台应用程序,它有自己的App.config 我需要不时更改部分中的一些值 我的问题是,当我在bin/debug文件夹中执行exe时,它会正确获取相关的appsettings。但当我编辑和更改某些键/值对的值并重新运行exe时,它仍然读取原始值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"); 在我的主要方法的开始。但是没有帮助 你能给
(所谓重新运行,是指通过调用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
,并打开正确的生成路径(例如调试、发布等)。注意到这一点是因为我有一个“我很傻”的时刻。