Error: XML transformation error in Azure Pipelines

Error: XML transformation error in Azure Pipelines

我花了一天时间试图查明 Azure DevOps 中的 XML 转换错误,但我似乎无法解决这个问题。在本地,配置转换工作正常,我要部署到的其他环境的配置转换在 Azure DevOps 中工作。

当 IIS Web 应用程序部署任务终止时,日志中出现的错误是:

2021-02-26T15:29:49.9263250Z ##[error]Error: XML transformation error while transforming C:\...\Web.config using C:\...\Web.Live.config.

显然,我已经删除了 Azure DevOps 应用的长文件路径。

在 IIS Web 应用程序部署任务日志中,出现以下错误,但未突出显示为重要错误。 Aster 记录了这个错误,它似乎确实应用了转换,然后给出了终止进程的上述错误:

2021-02-26T15:29:49.9178971Z System.NullReferenceException: Object reference not set to an instance of an object.
2021-02-26T15:29:49.9180071Z    at Microsoft.Web.XmlTransform.XmlTransformationLogger.ConvertUriToFileName(XmlDocument xmlDocument)
2021-02-26T15:29:49.9180525Z    at Microsoft.Web.XmlTransform.XmlTransformationLogger.LogWarning(XmlNode referenceNode, String message, Object[] messageArgs)
2021-02-26T15:29:49.9180911Z    at Microsoft.Web.XmlTransform.Transform.ApplyOnAllTargetNodes()

我已经检查了 XML 文件,但没有找到任何格式错误的 XML,我还 运行 通过 XML 验证器检查了它。我已经在 Visual Studio 2019 Professional(可能使用 Slow Cheetah)中在本地预览了转换,那里也很好。

任何人都可以指出可能导致管道中出现此转换错误的原因吗?

我找到了我的答案,它是由这位顶级小伙子或女士在线发布在博客上的。

https://tatvog.wordpress.com/2017/06/06/visual-studio-team-services-web-config-transform-error/

编辑: 如果 link 死机,解决方案如下。

我追踪到罪魁祸首是以下转换:

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

我通过将转换更改为这个来让它工作:

<system.web>
   <compilation targetFramework="4.5" xdt:Transform="Replace">
   </compilation>
</system.web>

我知道这个有点旧,但问题可能是 VSBuild 任务正在转换 web.config 文件,然后发布管道也在转换。

因此,例如,如果您有一个删除调试属性的转换,除非 VSBuild 任务具有 TransformWebConfigEnabled=False 参数,否则它将转换 web.config 并删除调试属性。当发布管道运行时,它将再次尝试删除该属性,但它已经被删除,因此抛出错误。

以下是我如何指示 VSBuild 任务不进行转换:

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)" /p:AutoParameterizationWebConfigConnectionStrings=False /p:TransformWebConfigEnabled=False'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'