为啥我在 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

为啥使用 app.config 来存储配置数据?

加密 app.config 中的连接字符串

为啥这个类库 dll 没有从 app.config 获取信息

为啥我的 app.config 不包含 connectionString (c#) [重复]