更改AppSetting对应用程序没有影响

时间:2010-12-11 05:06:41

标签: c# asp.net

我在ASP.Net上开发的一个应用程序。在这个应用程序中,我们一直在使用大量的AppSettings。在最初的开发中,我们使用了ConfigurationManager.AppSettings [“”]。但随着开发的进展,我们创建了一个实用程序类,我们在其中为每个AppSettings定义一个静态属性。然后问题开始出现。现在,当应用程序部署在测试服务器上并且我们更改AppSettings上的任何设置时,除非我们重新启动IIS,否则它没有任何效果。这是我用来创建AppSettings的静态属性的以下代码片段。

public static class AppSettingsUtil
{
      public static string Log4Net
      {
          get
          {
              return ConfigurationManager.AppSettings["Log4Net"];
          }
      }
}

我能想到的一个原因是,它是一个静态属性,因此可以在其生命周期中初始化一次,因此下次可能无法从appsettings中获取值。

3 个答案:

答案 0 :(得分:11)

我知道这是一个旧线程,但需要添加一些内容。

如果您使用:

<appSettings file="AppSettings.config" />

在更改web.config或执行重新启动之前,对外部文件的更改将不可用。

但如果你把它改为:

<appSettings configSource="AppSettings.config" />

您可以立即在代码中找到对这些设置的更改,而无需重新启动或更改web.config。

我刚刚确认这是可重复测试的情况。

答案 1 :(得分:3)

您显然正在部署配置文件,因为在重新启动IIS后,更新的配置可用。

听起来您正在为AppSettings使用外部文件:

<appSettings file="my-app-settings.config" />

这有助于保持web.config清洁,特别是如果您为不同的环境(例如,dev,testing,prod)维护不同的配置文件。但是,这种方法的缺点是ASP.NET不会自动检测外部文件的更改,因此您的设置不会自动刷新。

每个MSDN,在.NET Framework 2.0上对单独文件的更改不会导致后续应用程序重新启动。听起来您的解决方案是在这种情况下不使用外部文件。

答案 2 :(得分:0)

在不使用其中一个AOP框架的情况下,该上下文中的静态方法永远不会缓存来自配置的值。更可能的情况是网站没有被编译并移动到框架目录中。在个人方面,我更喜欢将该文件称为Config.cs。