【问题标题】:Changes in App.config do not reflect after restarting the applicationApp.config 中的更改不会在重新启动应用程序后反映出来
【发布时间】: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 文件的结构作为对这篇文章的回复。
  • 然后看我下面的答案。您正在更改错误的文件。

标签: c# app-config appsettings


【解决方案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 的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-31
    • 2020-05-27
    • 2021-07-14
    • 2010-10-02
    • 2023-03-13
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多