为啥我在 App.config 中的 AppSettings 更改没有在运行时考虑? (控制台应用程序)
Posted
技术标签:
【中文标题】为啥我在 App.config 中的 AppSettings 更改没有在运行时考虑? (控制台应用程序)【英文标题】:Why my changes of AppSettings in App.config is not taken into account in run-time? (Console Application)为什么我在 App.config 中的 AppSettings 更改没有在运行时考虑? (控制台应用程序) 【发布时间】:2012-07-13 02:18:49 【问题描述】:我有一个控制台应用程序,它有自己的 App.config。
我需要不时更改部分中的一些值。
我的问题是,当我在 bin/debug 文件夹中执行 exe 时,它会正确获取相关的 appsettings。但是当我编辑和更改某些键/值对的值并重新运行 exe 时,它仍然会读取原始值。
(通过 RE-RUN 我的意思是通过调用 MyTool.exe 在命令提示符上运行应用程序)
我试着打电话
ConfigurationManager.RefreshSection("appSettings");
在我的 Main 方法的开头。但没有帮助。
你能建议吗? 谢谢
【问题讨论】:
你是在IDE里面编辑app.config还是直接编辑BIN/DEBUG文件夹下的exe.config? 在调试文件夹中。不在 IDE 中。 那么属性 Copy to output directory of your app.config 在 IDE 中的值是多少? 对代码进行任何更改后只需按 F5 即可。只需重建,然后按 F5 以获取 app.config 中的新值,以便在bin\debug
文件夹下的 *.config 文件中更新
【参考方案1】:
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// change ConnectionString in App.Config for Entity FrameWork Object....
//.....
config.Save();
你保存配置文件了吗?
【讨论】:
【参考方案2】:但是当我编辑和更改某些键/值对的值并重新运行时 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"];
重新获取所需的值,这应该会返回新值。
【讨论】:
我同意。但是,如果我确实实现了我的要求怎么办。可能吗? (+1 最佳实践建议) 重新运行是指通过调用 MyTool.exe 在命令提示符上运行应用程序 应用程序运行时谁来修改这个文件?应用程序本身还是其他一些外部进程? 好的。我发现了问题,这是我的错。输出目录有 App.Config 和 MyApp.exe.config。我正在修改 App.config 。谢谢你提到它:) 另外值得一提的是,如果您在 Visual Studio 的调试器下运行,则需要更新 bin 文件夹中的MyApp.vshost.exe.config
,并打开正确的构建路径(例如 Debug、Release 等)。注意到这一点是因为我有一个“我很愚蠢”的时刻。以上是关于为啥我在 App.config 中的 AppSettings 更改没有在运行时考虑? (控制台应用程序)的主要内容,如果未能解决你的问题,请参考以下文章
web.config 覆盖 app.config ...为啥?
ConfigurationManager.AppSettings - 返回 Null