区分开发环境、暂存环境和生产环境之间的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(build | configuration manager…)为您的项目创建不同的配置(例如调试、开发、暂存和发布)时,VS会将web.*.config文件添加到解决方案中。默认web.config包含用于调试的基线设置。web.release.config、web.staging.config等包含XSLT转换,在基于活动生成配置发布项目时将应用这些转换

我的方法是拥有多个配置文件。我将所有与环境无关的内容(即无论是开发、暂存还是生产)都放在web.config文件中。我将特定于环境的任何内容(即数据库连接信息、日志记录、调试设置等)放入特定于环境的本地.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文件-这会迫使您在部署脚本中部署正确的文件

发表评论