我需要根据环境变量更改web.config文件中的连接字符串(对于不同的环境,如dev / staging / production等)。我已经看到其他使用构建任务来完成更改不同配置的解决方案,但是找不到能让我根据环境变量更改连接字符串的内容。有谁知道有任何方法可以做到这一点?
答案 0 :(得分:8)
我们在web.config中使用appSettings和connectionStrings元素的configSource属性。
基本上,我们为所有环境提供相同的web.config文件:dev,qa和production。
然后我们使用单独的“环境特定”文件..例如......
在web.config中:
<?xml version="1.0"?>
<configuration>
<appSettings configSource="local.appsettings.config" />
<connectionStrings configSource="local.connectionstrings.config" />
</configuration>
然后我们维护以下文件:
local.appsettings.config.development
local.appsettings.config.qa
local.appsettings.config.production
local.connectionstrings.config.development
local.connectionstrings.config.qa
local.connectionstrings.config.production
由于我们在部署之前预编译了所有的asp.net应用程序,因此我们的CI解决方案使用了一个自定义的msBuild任务,它将正确的配置文件(基于目标环境)复制到正确的.config文件中...
所以,如果我们要部署到dev,local.appsettings.config.development - &gt; local.appsettings.config
如果我们要部署到qa,local.appsettings.config.qa - &gt; local.appsettings.config
这使我们能够在所有环境中保持核心web.config一致。
答案 1 :(得分:2)
如何在web.config中使用两个连接字符串和另一个变量(如“isTesting
”,然后根据isTesting
的值选择要使用的连接字符串?
答案 2 :(得分:0)
您也可以使用配置部分,并根据部分之间的服务器名称切换。通过这种方式,您可以使用相同的键。
答案 3 :(得分:0)
您可以使用预建事件为配置管理器中的每个环境设置web.config。我试过这个效果非常好。
http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx
当您进行调试和构建时,您可以拥有本地/预生产/生产......等等。