文件转换任务无法转换压缩包上的 XML 配置

Jac*_*cek 2 azure azure-pipelines

我正在研究发布管道,它将对 App Service 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
Run Code Online (Sandbox Code Playgroud)

的转换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
...
Run Code Online (Sandbox Code Playgroud)

这个输出看起来是错误的,因为它在没有声明解释的情况下产生警告。如何解决此警告?

Jac*_*cek 5

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

命名模板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

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

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


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

一种。将压缩包解压到临时文件夹中

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

C。再次拉上拉链并更换原来的拉链。

  • 为我工作。对于 1c,我刚刚添加了一个复制 app.Config {YourApplicationName}.exe.config /Y 的命令行任务 (2认同)