【问题标题】:Error: XML transformation error in Azure Pipelines错误:Azure Pipelines 中的 XML 转换错误
【发布时间】:2021-02-26 16:06:58
【问题描述】:

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

IIS Web App部署任务终止时日志中出现的错误是:

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),那里也很好。

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

【问题讨论】:

    标签: asp.net azure azure-devops web-config continuous-deployment


    【解决方案1】:

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

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

    编辑: 如果链接失效,解决方法如下。

    我发现罪魁祸首是以下转换:

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

    我通过将转换更改为:

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

    【讨论】:

    • 太棒了!感谢您在此处分享您的解决方案,您可以接受它作为答案,这样它可以帮助遇到相同问题的其他社区成员,我们可以存档此线程,谢谢。
    • 我确实遇到了那个错误。谷歌的第一页。感谢 SO 和社区!
    • 如果我的目标是不同版本的框架,这会恢复到 4.5 吗?如果我在编译元素中有子节点怎么办,这会将它们全部删除吗?对不起,它基于需要更多详细信息\解释的答案和博客文章。
    【解决方案2】:

    我知道这个有点老了,但问题可能是 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)'    
    

    【讨论】:

      猜你喜欢
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      相关资源
      最近更新 更多