如何使用VSTS'正确'转换Web.Config文件?

时间:2018-01-29 17:53:49

标签: iis azure-devops azure-pipelines-release-pipeline web.config-transform

我正在使用VSTS开发DevOps。我有两个Web项目,如 webproject1 webproject2 ,每个项目都包含Web.config文件。但是,Web.config文件的那些Web项目包含具有不同值的相同键。

实施例: WebProjects1包含具有这些键值的Web.config文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
</configSections>
    <connectionStrings>
     <add name="DBConnectionString" connectionString="Server=XXXX;Integrated Security=SSPI;Persist Security Info=True;Database=XXXX;Connect Timeout=60;MultipleActiveResultSets=True;Min Pool Size=10;Max Pool Size=200;Application Name=XXXX" providerName="System.Data.SqlClient" />
   </connectionStrings>
</configuration>

WebProjects2包含带有这些键值的Web.config文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
</configSections>
    <connectionStrings>
     <add name="DBConnectionString" connectionString="Server=XXXX;Integrated Security=SSPI;Persist Security Info=True;Database=XXXX;Connect Timeout=60;MultipleActiveResultSets=True;Min Pool Size=10;Max Pool Size=200;Application Name=XXXX" providerName="System.Data.SqlClient" />
   </connectionStrings>
</configuration>

对于这些项目,我使用 IIS Web App Manag e和 IIS Web App部署部署任务在VSTS中创建了发布定义。我想用两个Web.config文件中的客户端键值替换键值。但是这两个Web.config文件具有相同的密钥。因此,我无法使用变量选项卡在IIS Web App Deploy VSTS发布任务下使用 XML变量替换选项将两个Web.config文件中的客户端值替换为密钥。

我按照这个link使用VSTS'正确'转换Web.Config文件,但是本文档包含用单个web.config文件中的客户端值替换密钥。但它不包含有关多个web.config文件是否在多个项目中具有相同键的说明。

我知道使用多配置架构来实现上述问题,例如为VS2015中的每个Web项目创建Web.Debug.config和Web.Release.config文件。但我不想要这个过程。

提前致谢....

1 个答案:

答案 0 :(得分:3)

默认情况下,MSBuild将“帮助”参数化您的连接字符串。这些将显示在SetParameters.xml文件中的构建工件的根目录中。当您尝试使用变量设置连接字符串时,此过程会发生冲突,正如您尝试的那样。

我建议在您的构建中关闭自动参数化,并查看您的连接字符串现在是否已替换为您的变量值。您应该能够命名变量“DBConnectionString”,将其绑定到环境,并且此过程流畅。

Turn off Auto Parameterization