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)'
我花了一天时间试图查明 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)'