我现在处理这个问题的方法是通过多个配置文件,如:如何为多个环境处理多个web.config文件?
web.config
web.Prod.config
web.QA.config
web.Dev.config
当项目被部署到不同的环境,我只是用正确的设置重新命名相应的文件。
任何人都有如何更好地处理这个问题的建议?
编辑: 这里有一些的,在每个配置改变的事情:
- WCF客户端点URL和安全
- 自定义数据库CONFIGS
- 会话连接字符串
- log4net的设置
我现在处理这个问题的方法是通过多个配置文件,如:如何为多个环境处理多个web.config文件?
web.config
web.Prod.config
web.QA.config
web.Dev.config
当项目被部署到不同的环境,我只是用正确的设置重新命名相应的文件。
任何人都有如何更好地处理这个问题的建议?
编辑: 这里有一些的,在每个配置改变的事情:
这实际上取决于环境之间的差别这导致你使用不同的web.config文件。你能否提供更多的信息,说明为什么每个环境目前需要一个不同的环境?
我想每个环境都需要专门的数据库连接,状态服务配置以及其他各种可配置项目,这些项目很大程度上取决于您所处的环境。 – 2009-02-26 22:26:13
我们一直在做它的方式是重写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具有配置变换看起来相当真棒,应该多配置一个完整的微风。
这很有趣 - 您是否管理每个AppSettingsOverride.config文件源代码管理呢?使用你的方法和使用单独的web.config文件有什么区别? – 2009-02-26 22:27:50
在Visual Studio中,我创建了xcopy build事件,并将所有配置文件存储在/ config文件夹中。如果您在构建配置之后为文件命名,则只需要一个事件:即使用/config/web.$ (Configuration).config覆盖web.config
我们有几个解决方法(不是所有的都是使用web.config完成,但具有相同的想法)
通过大多数不同的版本管理软件(subversion,git等),您可以忽略特定的文件。
因此,在颠覆,我有:
configure.template.php - 该文件版本,并包含模板化的配置数据,如空的DSN 的configure.php - 此文件将被忽略,从而使对它的更改不会被跟踪。
在颠覆,要做到这一点的方法是:
SVN PE的svn:忽视。 它会打开你的编辑器,然后你键入 configure.php
保存,退出,签入你的更改,你很好走。
我最喜欢的解决方法是使用configSource
属性。不可否认,我只在一个元素(<connectionStrings>
)上使用它,但它确实提供了一种简单的方法来交换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一起执行自动日常构建与单元测试验证,并认为他们合作得很好。
变换似乎对此很有帮助。您可以用不同的规则替换某些部分。
http://msdn.microsoft.com/en-us/library/dd465318(v=vs.100).aspx
这是我做的方式,除了web.config文件和网页dev.config是一样的。 – tvanfosson 2009-02-26 22:15:47