使用VSTS构建时,Web.config转换会删除元素

时间:2017-02-15 09:43:32

标签: azure-pipelines web.config-transform

我们正在使用VSTS进行持续集成(CI)。我们在签入时配置了自动构建,然后在构建成功时自动释放。 我们添加了一个名为" CI"到项目,以及web.CI.config转换文件,以替换应用程序设置和连接字符串以匹配目标环境,以及" CI"使用CI配置发布配置文件。

当构建由VSTS完成时,生成的web.config文件中缺少许多元素。具体而言,< system.web>部分几乎是空的; < authentication>,< pages>等元素或< siteMap>缺少,导致网站无法正常工作。

生成的web.config文件中的System.web部分:

<system.web>
  <compilation targetFramework="4.5.2" />
  <httpRuntime targetFramework="4.5.2" />
</system.web>

&lt; appSettings&gt;上的转换和&lt; connectionStrings&gt;部分正确应用。此外,当我使用CI配置文件在本地发布(从Visual Studio Enterprise 2015)时,配置转换按预期完成(system.web中没有元素丢失,网站按预期运行)。

我假设VSTS构建还应用了web.CI.config中指定的其他转换。

问题是:如何阻止VSTS构建转换web.config文件?

VSTS配置

以下是在VSTS中配置构建步骤的方法:

  • 解决方案:** \ * .sln
  • MSBuild参数:/ p:DeployOnBuild = True / p:PublishProfile = CI / p:DeployDefaultTarget = WebPublish / p:WebPublishMethod = FileSystem / p:publishUrl =&#34; $(build。 artifactstagingdirectory)\\&#34; / P:DeleteExistingFiles =真
  • 平台:$(BuildPlatform)
  • 配置:$(BuildConfiguration)
  • 清洁(未选中)
  • Visual Studio版本:Visual Studio 2015

变量在变量部分中配置:

  • BuildConfiguration :CI
  • BuildPlatform :任何cpu

“高级”和“控制选项”部分保留了默认值。

构建步骤类型是 Visual Studio Build 。我也尝试了 MSBuild ,结果相同。

Web.config文件

(删除敏感信息)

<configuration>
  <configSections>
    <sectionGroup name="AspNetPerformance.Tools">
      <section name="Caching" requirePermission="false" type="AspNetPerformance.Tools.Configuration.AspNetPerformanceSection, AspNetPerformance.Tools"/>
      <section name="Minifying" requirePermission="false" type="AspNetPerformance.Tools.Configuration.AspNetPerformanceSection, AspNetPerformance.Tools"/>
    </sectionGroup>
  </configSections>
  <appSettings>
    <add key="TheKey" value="TheValue" />
    <!-- other add elements -->
  </appSettings>
  <connectionStrings>
    <clear/>    
    <add name="FirstConnectionString" connectionString="..." providerName="System.Data.SqlClient" />
    <add name="SecondConnectionString" connectionString="..." providerName="System.Data.SqlClient" />      
  </connectionStrings>
  <system.web>
    <compilation debug="true" targetFramework="4.5.2"/>
    <trace enabled="true"/>
    <customErrors mode="Off"/>
    <authentication mode="Windows"/>
    <pages enableSessionState="true" controlRenderingCompatibilityVersion="4.0" clientIDMode="Static">
      <controls>
        <add tagPrefix="atk" namespace="AjaxControlToolkit" assembly="AjaxControlToolkit"/>
        <!-- other add elements -->
      </controls>
    </pages>
    <siteMap enabled="true" defaultProvider="CustomXmlSiteMapProvider">
      <providers>
        <add name="CustomXmlSiteMapProvider" type="..." securityTrimmingEnabled="false" siteMapFile="Web.sitemap"/>
      </providers>
    </siteMap>
    <webServices>
      <protocols>
        <add name="HttpPost"/>
      </protocols>
    </webServices>
    <httpCookies httpOnlyCookies="true"/>
    <sessionState cookieless="UseCookies"/>
    <authorization>
      <deny users="?"/>
    </authorization>
    <globalization uiCulture="en-US" />
  </system.web>
</configuration>

Web.CI.config文件

(删除敏感信息)

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <appSettings>
    <add key="TheKey" value="TheNewValue" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
    <!-- all other settings transformed the same way -->
  </appSettings>
  <connectionStrings>
    <add name="FirstConnectionString" connectionString="NewValue" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    <add name="SecondConnectionString" connectionString="NewValue" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>

  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>
</configuration>

我发布了Web.config和Web.CI.config,因为它被问到了,但我重复一遍,即执行预期的转换(包括删除system.web下编译元素中的debug属性)。此外,当我使用CI配置在本地部署时,生成的Web.config文件是预期的。我不认为问题出在web.config转换本身,但是在VSTS中。

0 个答案:

没有答案