3Da*_*ave 33 asp.net deployment configuration web-config
任何人都有任何关于处理环境之间的web.config设置差异的好技巧?我考虑在我们的源代码管理系统中创建一个'config'文件夹,但在Web层次结构之外,并让部署过程复制相应的配置文件(web.dev.config,web.staging.config,web.production.config) )部署后进入Web文件夹.我还看过有关如何在应用程序启动时以编程方式更改配置设置(WCF端点,连接字符串等)的帖子.
什么被认为是最佳实践,以及每个人对这些或其他方法的经验是什么?
2010年9月更新
值得注意的是,Visual Studio 2010通过web.config转换添加了此功能.当您使用构建配置管理器(Build | Configuration Manager ...)为项目创建不同的配置(例如,Debug,Dev,Staging和Release)时,VS会将web.*.config文件添加到解决方案中.默认的web.config包含您将用于调试的基准设置.web.release.config,web.staging.config等包含XSLT转换,每当您基于活动构建配置发布项目时将应用这些转换.
Bri*_*ntz 17
我的方法是拥有多个配置文件.我在web.config文件中放置了所有与环境无关的东西(即无论是开发,暂存还是生产).任何特定于环境的东西(即数据库连接信息,日志记录,调试设置等)我都放入了特定于环境的local.config文件中.然后,您可以使用configSource在web.config中包含local.config设置(http://weblogs.asp.net/fmarguerie/archive/2007/04/26/using-configsource-to-split-configuration-files.aspx)
然后可以将Web.config检入源代码管理.不要检入local.config文件 - 这会强制您在部署脚本中部署正确的文件.
我使用CruiseControl.NET/NAnt和NAnt有一个XMLPoke任务,允许您在构建时使用XPath查询并更改任何配置设置.
因此,在我的每个构建目标(DEV,UAT,STAGING等)中,我设置了一堆属性,然后调用主构建目标.主构建目标获取所有属性的值,并将它们XMLPokes到配置和构建中.
我见过并使用过的一种方法是在web.config中设置密钥,以便按名称区分计算机.
例如:
<add key="comp1.Environment" value="DEV"/>
<add key="compdb1.Environment" value="PROD"/>
<add key="compstage.Environment" value="STAGE"/>
Run Code Online (Sandbox Code Playgroud)
显然comp1,compdb1是实际的计算机名称.
然后你会设置如下:
<add key="KeyName,DEV" value="DevEnvironmentValue"/>
Run Code Online (Sandbox Code Playgroud)
在您的代码中,您需要检查运行应用程序的环境,然后获取相应的密钥,例如.
private string GetKeyValue() {
string machineName = String.Concat(System.Environment.MachineName, ".Environment");
string environment = ConfigurationManager.AppSettings[machineName];
string key = String.Concat("KeyName", ",", environment);
string keyValue = ConfigurationManager.AppSettings[key];
return keyValue;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20569 次 |
最近记录: |