2009-02-26 81 views
25

我现在处理这个问题的方法是通过多个配置文件,如:如何为多个环境处理多个web.config文件?

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

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

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

编辑: 这里有一些的,在每个配置改变的事情:

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

这是我做的方式,除了web.config文件和网页dev.config是一样的。 – tvanfosson 2009-02-26 22:15:47

回答

17
斯科特

顾了有关这一一个article一次。他提出的解决方案是使用预生成事件根据所选的构建配置将正确的配置复制到位。

我也注意到在SO上已经有类似的question了。

0

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

+0

我想每个环境都需要专门的数据库连接,状态服务配置以及其他各种可配置项目,这些项目很大程度上取决于您所处的环境。 – 2009-02-26 22:26:13

0

我们一直在做它的方式是重写appSettings部分:

<appSettings file="../AppSettingsOverride.config"> 
    <add key="key" value="override" />  
    ... 
</appSettings> 

为appSettings部分这只适用,因此只在一定程度上是有用的。我会对更强大的解决方案非常感兴趣。

编辑下面

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

VS2010具有配置变换看起来相当真棒,应该多配置一个完整的微风。

+0

这很有趣 - 您是否管理每个AppSettingsOverride.config文件源代码管理呢?使用你的方法和使用单独的web.config文件有什么区别? – 2009-02-26 22:27:50

1

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

0

我们有几个解决方法(不是所有的都是使用web.config完成,但具有相同的想法)

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

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

因此,在颠覆,我有:

configure.template.php - 该文件版本,并包含模板化的配置数据,如空的DSN 的configure.php - 此文件将被忽略,从而使对它的更改不会被跟踪。

在颠覆,要做到这一点的方法是:

SVN PE的svn:忽视。 它会打开你的编辑器,然后你键入 configure.php

保存,退出,签入你的更改,你很好走。

1

我最喜欢的解决方法是使用configSource属性。不可否认,我只在一个元素(<connectionStrings>)上使用它,但它确实提供了一种简单的方法来交换web.config的不同段(我通过WebSetup项目在安装过程中完成)。

1

我还使用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一起执行自动日常构建与单元测试验证,并认为他们合作得很好。