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

pen*_*ake 11 .net c# configurationmanager app-config

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

我需要不时更改部分值.

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

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

我试着打电话

ConfigurationManager.RefreshSection("appSettings");
Run Code Online (Sandbox Code Playgroud)

在我的主要方法的开头.但没有帮助.

你能给些建议么?谢谢

Dar*_*rov 34

但是当我编辑和更改某些键/值对的值并重新运行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"];将返回新值.

  • 另外值得一提的是,如果您在Visual Studio中的调试器下运行,则需要更新bin文件夹中的`MyApp.vshost.exe.config`,并打开正确的构建路径(例如Debug,Release等).注意到这一点,因为我有一个"我很蠢"的时刻. (3认同)
  • 好。我发现了问题,这很不好。输出目录同时具有App.Config和MyApp.exe.config。我改为修改App.config。感谢您提到它:) (2认同)