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 的内容吗? 还有哪个文件正在更改内容?应用程序配置?还是与应用程序运行在同一目录中的 .exe.config? 我正在手动更改 App.config 文件的内容。我将发布我的 app.config 文件的结构作为对这篇文章的回复。 然后看我下面的答案。您正在更改错误的文件。 【参考方案1】:

您的类和方法的静态性质可能会导致您出现问题。也许将其重构为以下...

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 中的更改不会在重新启动应用程序后反映出来的主要内容,如果未能解决你的问题,请参考以下文章

CSHTML 视图在应用程序重新启动之前不会更新

加密将重新分发的 App.config 文件中的部分和/或设置

c# - 在运行时更改 App.Config 后,实体框架 ConnectionString 不会更新

如何重新创建 app.config.exe.config

我在 django 中的静态文件不会被重新加载,除非我每次重新启动电脑时都重命名它们

为啥我在 App.config 中的 AppSettings 更改没有在运行时考虑? (控制台应用程序)