我在ASP.Net上开发的一个应用程序。在这个应用程序中,我们一直在使用大量的AppSettings。在最初的开发中,我们使用了ConfigurationManager.AppSettings [“”]。但随着开发的进展,我们创建了一个实用程序类,我们在其中为每个AppSettings定义一个静态属性。然后问题开始出现。现在,当应用程序部署在测试服务器上并且我们更改AppSettings上的任何设置时,除非我们重新启动IIS,否则它没有任何效果。这是我用来创建AppSettings的静态属性的以下代码片段。
public static class AppSettingsUtil
{
public static string Log4Net
{
get
{
return ConfigurationManager.AppSettings["Log4Net"];
}
}
}
我能想到的一个原因是,它是一个静态属性,因此可以在其生命周期中初始化一次,因此下次可能无法从appsettings中获取值。
答案 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。