App.config 中的更改不会在重新启动应用程序后反映出来
Posted
技术标签:
【中文标题】App.config 中的更改不会在重新启动应用程序后反映出来【英文标题】:Changes in App.config do not reflect after restarting the application 【发布时间】:2010-12-27 04:48:33 【问题描述】:我正在使用 app.config 文件来存储我的应用程序的动态参数。问题是,当我更改 app.config 文件中的值并启动应用程序时,它不会从配置文件中加载新值。似乎 app.config 文件中的值仅在编译时被读取并嵌入到 exe 文件中!
这是我读取配置文件的方式:
public class Helper
static Helper()
Foo = ConfigurationManager.AppSettings["Foo"];
public static string Foo get; set;
我错过了什么吗?
【问题讨论】:
你能发布 app.config 的内容吗? 还有哪个文件正在更改内容?应用程序配置?还是与应用程序运行在同一目录中的您的类和方法的静态性质可能会导致您出现问题。也许将其重构为以下...
public static class Helper
public static string Foo
get
return ConfigurationManager.AppSettings["Foo"];
实际上,仔细想想,它对您没有多大帮助,因为 ConfigurationManager.AppSettings["Foo"]
已经(实际上)是一个静态调用 - 您只是添加了另一个可能不需要的抽象层。
【讨论】:
是的,你是对的,我想这可能是由于静态属性的性质。只有三点:1)我将其设为静态,以便每次读取属性时都不会从配置文件中读取它。 2)我的方法在 web 应用程序的 web.config 文件中效果很好 3)如果是静态属性的问题,我关闭应用程序并重新启动后保存的值在哪里?! 它们存储在配置文件中。最初的问题在成员中有一个设置器,但是 IIRC 你不能从代码中设置 app.config 参数(除非行为改变了,我错过了) 我不想从代码中更改 app.config 文件中的值。我只是手动更改值。我只是不知道为什么下次运行应用程序时不会反映此更改。即使我重命名或删除 app.config 文件,exe 文件也运行得很好!好像不需要再次读取配置文件一样。正如我所说,似乎 app.config 文件中的键值仅在编译时读取并嵌入到 exe 文件中。 不,它们没有被编译。尝试更改您的代码库以每次使用ConfigurationManager.AppSettings["Foo"]
并验证行为。如果(何时)它是这样工作的,你就会知道问题出在你的 Helper 类中。
好的,让我试试,我会告诉你的。【参考方案2】:
您确定要更改正确的文件吗?您不想更改 app.config 文件,而是更改 <exename>.exe.config
文件,与 .exe 位于同一目录中
app.config 文件是你在 ide 中编辑的,但是当你编译你的应用程序时,这个文件被重命名为 <exename>.exe.config
并在你编译时复制到输出目录。在查找默认配置时,.exe 会查找与自身同名且扩展名为 .config 的文件。
【讨论】:
以上是关于App.config 中的更改不会在重新启动应用程序后反映出来的主要内容,如果未能解决你的问题,请参考以下文章
加密将重新分发的 App.config 文件中的部分和/或设置
c# - 在运行时更改 App.Config 后,实体框架 ConnectionString 不会更新