【问题标题】:File Transform task fails to transform XML configurations on zipped package文件转换任务无法转换压缩包上的 XML 配置
【发布时间】:2019-08-14 15:58:44
【问题描述】:

我正在开发发布管道,它将对 App Service Worker 配置执行转换,然后将发布 worker + Web 应用程序。

我的输入包是从 MsBuild 发布(来自 ASP.NET 构建管道)生成的 zip 包。

...\PackageTmp\app_data\jobs\triggered\BillingWorker\App.Prod.config
...\PackageTmp\app_data\jobs\triggered\BillingWorker\App.Test.config
...\PackageTmp\app_data\jobs\triggered\BillingWorker\BillingWorker.exe.config
...\PackageTmp\app_data\jobs\triggered\EtlWorker\App.Prod.config
...\PackageTmp\app_data\jobs\triggered\EtlWorker\App.Test.config
...\PackageTmp\app_data\jobs\triggered\EtlWorker\EtlWorker.exe.config
...\PackageTmp\Web.config
...\PackageTmp\Web.Test.config
...\PackageTmp\Web.Prod.config
...\PackageTmp\many other files

Web.config 的转换由Publish to Azure Web App 任务正确完成。但是,worker 配置不会自动转换,因此我添加了一个 File Transform 任务,其配置如下:

此步骤不起作用,这是输出:

2019-08-14T15:41:01.1435779Z ##[section]Starting: File Transform: config
2019-08-14T15:41:01.1576716Z ==============================================================================
2019-08-14T15:41:01.1576853Z Task         : File transform
2019-08-14T15:41:01.1576932Z Description  : Replace tokens with variable values in XML or JSON configuration files
2019-08-14T15:41:01.1576994Z Version      : 1.156.0
2019-08-14T15:41:01.1600786Z Author       : Microsoft Corporation
2019-08-14T15:41:01.1600885Z Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/file-transform
2019-08-14T15:41:01.1600986Z ==============================================================================
2019-08-14T15:41:01.6339900Z ##[warning]Unable to apply transformation for the given package. Verify the following.
2019-08-14T15:41:01.6351367Z ##[warning]Unable to apply transformation for the given package. Verify the following.
2019-08-14T15:41:01.8369297Z Initiated variable substitution in config file : 
...
... many lines about variable subsitution
...

此输出看起来错误,因为它会产生警告而没有声明解释。如何解决此警告?

【问题讨论】:

  • 这是一个非常笼统的警告,例如,由 .csproj 文件中的<DependentUpon> 标签或缺少applicationSettings 标签等引起。您介意通过共享完整日志更新问题吗?对于一些秘密信息,您可以用**替换。
  • 您找到解决方案了吗?我遇到了同样的问题,我检查了所有已知的解决方案(例如 DependentUpon 问题),但没有成功,即使打开了调试,我的日志也没有比你的多。
  • 是的,我会在这里写我自己的答案,因为它有点棘手。

标签: azure azure-pipelines


【解决方案1】:

问题在于文件转换任务强烈依赖于两个文件的名称——一个被转换的文件和一个包含转换规则的文件。需要严格的命名约定,可以用以下词语来描述:

一个名为 Name.xml 的模板只能由名为 Name.Debug.xmlName.Release.xml 和更通用的文件 - Name.{anything-here}.xml 转换。

这里发生的情况是App.config 文件在构建过程中被重命名为{YourApplicationName}.exe.config,因此使用App.Debug.config 的转换失败。

我看到了 2 个解决方法:


1。保留原名App.config

一个。在项目文件中,将App.config文件的属性设置为Copy to output directory: Copy always

b.使用 args -transform *.Debug.config -xml *.config -result {YourApplicationName}.exe.config 设置“文件转换任务”

c(可选)。如果您没有在任务中指定-result,则需要设置另一个任务来将App.config 重命名为{YourApplicationName}.exe.config转换完成后(例如带有命令@987654334 的命令行任务@)


2。编写自定义转换器脚本

一个。解压包到临时文件夹

b.使用 Powershell 转换文件(利用安装在代理上的 Microsoft.Web.XmlTransform.dll)

c。再次压缩并替换原来的压缩包。

【讨论】:

  • 为我工作。对于 1c,我刚刚添加了一个命令行任务,它复制 app.Config {YourApplicationName}.exe.config /Y
【解决方案2】:

官方任务中的原生步骤不支持 zip 文件的转换。您可以在部署任务之前使用另一个任务来执行它。

我使用了它,它对我来说很好用: https://marketplace.visualstudio.com/items?itemName=solidify-labs.vsts-task-tokenize-in-archive

【讨论】:

  • 我不明白,在源路径属性的描述中,他们提出了 $(System.DefaultWorkingDirectory)/**/*.zip。来自 MSDN:对于压缩文件夹,内容被提取到 TEMP 位置,执行转换,并将结果压缩到原始工件位置。
猜你喜欢
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 2021-02-08
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多