“对这些重要文件*注1的修改将立即被ASP.NET运行库检测到,并导致所有页面被重新编译。”
——《精通ASP.NET程序设计 Programming Microsoft ASP.NET》第12章
如上面所述,我们在修改配置文件Web.config时,因为所有页面都会重新编译,会导致短暂的服务中断。这里有一个方法可以避免:
将常用且有可能发生改变的配置都放在appSetting节中,如:
<add key="SMTPServerAddress" value="0.0.0.0"/>
</appSettings>
Web.config中appSettings节有个属性:configSource,这个属性可以指定一个存储appSettings的外部文件路径(只支持相对路径),而这个外部文件的修改是不会引起页面的重新编译的,同时它的改动也能立即被ASP.NET运行库检测到。可谓一举两得。
Web.config中的appSettings的配置:
<configuration>
<appSettings configSource="Settings\WebAppSettings.config" />
</configuration>
外部文件Settings\WebAppSettings.config的内容:
<appSettings>
<add key="SMTPServerAddress" value="0.0.0.0"/>
</appSettings>
*注1、Web.config配置文件
----------------------------------------------------------------------
20091120 UPDATE
后来的事实证明,默认情况下,外部的配置文件修改并不会让修改立即生效,要马上生效要回收该WebApp的应用程序池。
分离配置文件的好处并非如我之前所讲可以避免重新编译,而是使Web.config环境无关,不用为生产服务器和开发服务器维护2份Web.config,有差异的部分都分离出来即可[1]。比如在开发和生产环境使用不同的connectionStrings.config 和 smtp.config,好处是 web.config 更小巧且更易读, 不需要为生产开发两个环境分别配置Web.config。