基于ASP.NET中的环境变量更改web.config文件

时间:2009-07-16 21:19:25

标签: asp.net web-config development-environment environment-variables

我需要根据环境变量更改web.config文件中的连接字符串(对于不同的环境,如dev / staging / production等)。我已经看到其他使用构建任务来完成更改不同配置的解决方案,但是找不到能让我根据环境变量更改连接字符串的内容。有谁知道有任何方法可以做到这一点?

4 个答案:

答案 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)

您也可以使用配置部分,并根据部分之间的服务器名称切换。通过这种方式,您可以使用相同的键。

link text

答案 3 :(得分:0)

您可以使用预建事件为配置管理器中的每个环境设置web.config。我试过这个效果非常好。

http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx

当您进行调试和构建时,您可以拥有本地/预生产/生产......等等。