如何处理多个环境的多个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
我与CruiseControl.net和NUnit一起使用它来执行unit testingvalidation的自动日常构建,并认为它们可以很好地协同工作。
这实际上取决于导致您使用不同web.config文件的环境之间的差异。 您能否提供更多信息,说明为什么每个环境目前需要不同的环境?
我们有一些解决方法(并非所有这些都是使用web.config完成的,但是相同的想法)
- 我们在打包部署中包含多个配置文件。 在安装过程中,我们指定要安装的环境。
- 将所有特定于环境的设置迁移到该环境的数据库服务器。 WebServer在请求服务器名称时提供其环境
- 提供多个设置(每个环境1个)并使用代码请求不同的设置。
- 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的配置变换看起来非常棒,应该让多个配置变得轻而易举。