2011-07-14 81 views
2

我正在开发一个包含多个配置文件(Web,ConnectionStrings Windsor,Smtp,Appsettings,Nlog等)的环境(Local,Development,Main,Prod,Live)的项目。每个环境的配置文件

当前使用的策略是为每个分支配置其中一个配置,并手动维护配置,而不是合并任何更改。

在这种设置下存储和部署配置文件的更优雅的选项是什么?

+0

这可能属于http://programmers.stackexchange.com –

+0

这些天交流太多! – Dan

回答

0

通常我试图将这些设置中的大部分保留在appSettings中(尽管我知道这不是他们的“官方”正确位置)。然后,我将appSettings分解为一个environment.config文件,并通过configSource属性在web.config引用中包含appSetting元素。

当我设置新的环境时,我手动设置该环境的environment.config文件。当我部署新版本时,我会从部署中排除environment.config文件,以使特定于环境的版本保持原样。

这使您可以部署web.config的新副本以包含与项目相关的更改,同时将所有真正的环境特定设置保留在单独的位置。

+0

使用msbuild切换文件? – Dan

+0

是的,你绝对可以使用MSbuild来交换文件,但我不想对你的构建环境做任何假设。无论如何,我使用TeamCity和NAnt进行构建,但我仍然使用这种方法进行配置,仅仅因为它非常简单。 –

0

一个优雅的解决方案是使用WebDeploy(来自Microsoft)部署您的Web应用程序。运行部署时,可以指定一个特定于站点的参数文件,该文件将用于替换web.config文件中的多个值。

对于部署,WebDeploy使用Visual Studio或msbuild可以创建的部署包。

这样,我们可以首先在测试系统上部署一个部署包,运行多个测试,然后在通过测试时在多个服务器上进行部署而不进行任何更改。每个服务器都有其本地参数文件,几乎不会更改,并且包含特定于站点的值。

0

将它们存储在所有环境中具有相同名称的文件服务器上。我不熟悉所有的配置,但大多数都有这样做的方法。这种方法唯一的问题通常是dev/local,通常共享一个文件服务器,所以你必须手工改变本地。

如果实际上不能将配置指向文件服务器,那么不太优雅的解决方案是在部署或启动时通过bat文件将其拉下。似乎有很多选择,而不是手工维护,这是错误的倾向。