如何处理多个环境的多个web.config文件?

我目前处理这个问题的方法是使用多个配置文件,例如:

web.config web.Prod.config web.QA.config web.Dev.config 

当项目部署到不同的环境时,我只需使用正确的设置重命名相应的文件。

有人建议如何更好地处理这个问题?

编辑:以下是每个配置中的一些变化:

  • WCF客户端端点URL和安全性
  • 自定义数据库配置
  • 会话连接字符串
  • log4net设置

Scott Gu有一篇关于此的文章 。 他提出的解决方案是使用Pre-build事件将正确的配置复制到位,具体取决于所选的构建配置。

我也注意到SO上已经存在类似的问题了。

转换似乎对此非常有帮助。 您可以使用不同的规则替换某些部分。

http://msdn.microsoft.com/en-us/library/dd465318(v=vs.100).aspx

在Visual Studio中,我创建了xcopy构建事件,并将所有配置文件存储在/ config文件夹中。 如果在构建配置后命名文件,则只需要一个事件用于所有配置:即使用/config/web.$(Configuration).config覆盖web.config

我最喜欢的解决方法是使用configSource属性。 不可否认,我只在一个元素( )上使用它,但它确实提供了一种交换进出web.config不同段的简单方法(我在安装时通过WebSetup项目执行此操作)。

我还使用web.DEV.config,web.TEST.config,web.PROD.config等。

如果您的项目不复杂,我发现这是最简单,最简单和最直接的方式。 我不喜欢让事情比必要的更复杂。

但是,我使用过NAnt,我认为它适用于此。 您可以为不同的环境设置构建。 NAnt需要一些阅读来学习如何使用它,但它非常灵活。

http://aspnet.4guysfromrolla.com/articles/120104-1.aspx

http://nant.sourceforge.net/

我与CruiseControl.net和NUnit一起使用它来执行unit testingvalidation的自动日常构建,并认为它们可以很好地协同工作。

这实际上取决于导致您使用不同web.config文件的环境之间的差异。 您能否提供更多信息,说明为什么每个环境目前需要不同的环境?

我们有一些解决方法(并非所有这些都是使用web.config完成的,但是相同的想法)

  1. 我们在打包部署中包含多个配置文件。 在安装过程中,我们指定要安装的环境。
  2. 将所有特定于环境的设置迁移到该环境的数据库服务器。 WebServer在请求服务器名称时提供其环境
  3. 提供多个设置(每个环境1个)并使用代码请求不同的设置。
  4. 2和3的组合(根据环境覆盖部分设置 – 例如应用程序服务器名称)

通过大多数不同的版本管理软件(subversion,git等),您可以忽略特定文件。

因此,在颠覆中,我有:

configure.template.php – 此文件已版本化并包含模板化配置数据,例如空DSN的configure.php – 此文件将被忽略,因此不会跟踪对其的更改。

在颠覆中,这样做的方法是:

svn pe svn:忽略。 它将打开您的编辑器,然后键入configure.php

保存,退出,检查您的更改,您就可以开始了。

我们一直在做的方式是覆盖AppSettings部分:

   ...  

这仅适用于appSettings部分,因此仅适用于某种程度。 我对更强大的解决方案非常感兴趣。

编辑下面

刚看了这个: http : //channel9.msdn.com/shows/10-4/10-4-Episode-10-Making-Web-Deployment-Easier/

VS2010的配置变换看起来非常棒,应该让多个配置变得轻而易举。