如何在Web部署zip中包含我的配置转换文件?

Jep*_*zen 5 azure-devops azure-pipelines azure-pipelines-release-pipeline

我在Azure Devops中建立了一个新的构建和部署管道。它是一个较旧的Web应用程序,其中包含一些用于web.config的转换文件。过去,我们会根据多少个环境来构建相同的代码x次。正如我从这里阅读的那样,这不再是必需的https://docs.microsoft.com/zh-cn/azure/devops/pipelines/tasks/transforms-variable-substitution?view=vsts#xmltransform

看来部署管道可以从我的转换文件中获取更改。

但是问题是我的其他转换文件没有包含在包中,所以我收到了以下警告消息:

[warning]Unable to apply transformation for the given package. Verify the following.
[warning]1. Whether the Transformation is already applied for the MSBuild generated package during build. If yes, remove the <DependentUpon> tag for each config in the csproj file and rebuild. 
[warning]2. Ensure that the config file and transformation files are present in the same folder inside the package.
Run Code Online (Sandbox Code Playgroud)

是的,当我下载工件时,Web。[stage] .config文件不存在建议的位置。

是否有一些设置可以让我包含这些文件?还是阻止他们转型?

Jos*_*ust 5

对于Web应用程序

MSBuild知道如何基于以下设置/属性/参数来转换web.config文件

  • 构建配置
    dotnet publish --configuration Release
  • 发布个人资料
    dotnet publish --configuration Release /p:PublishProfile=FolderProfile
  • 环境
    dotnet publish --configuration Release /p:EnvironmentName=Production
  • 自定义文件转换
    dotnet publish --configuration Release /p:CustomTransformFileName=custom.transform

我认为对于开发人员来说,仅基于构建配置来实现此目标很典型,并且我相信MSBuild(和dotnet)知道如何基于<DependentUpon>Web.config</DependentUpon>项目或构建脚本文件中Web。[configuration] .config项中的元素来执行此操作。 。

Azure DevOps 发布管道有所不同。管道要在构建/发布项目后转换web.config,并且如果MSBuild(或dotnet)已经尝试过,则不知道该怎么做。从而:

[警告]无法对给定的包应用转换。验证以下内容。
[警告] 1。在构建过程中是否已将转换应用于MSBuild生成的程序包。如果是,请删除csproj文件中每个配置的标签并重新构建。
[警告] 2。确保配置文件和转换文件位于软件包内的同一文件夹中。

警告文本指出:

  1. 删除<DependentUpon>csproj中每个配置的标签
    • 因此:您需要从csproj中删除标签,以防止MSBuild转换文件
    • 或者:您需要使用/p:TransformWebConfigEnabled=FalseMSBuild 的参数。
      (注意:我认为可以不使用依赖标签来使用,但这是正确的,但我可能是错的)
  2. 确保转换源文件和目标文件位于程序包中的同一文件夹中。
    • 可能有几种方法可以做到这一点。我选择将转换源配置文件标记为内容,以强制MSBuild将它们包括在已发布的程序包中。

现在,您需要根据文件转换和值替换文档来组织发布管道。

根据所需转换命名的阶段

[节]开始:IIS Web App部署
===================================
任务:IIS Web应用程序部署
说明:使用Web部署
版本部署网站或Web应用程序 :0.0.51
作者:Microsoft Corporation
帮助:更多信息
======================== =========== ...
[命令] C:... \ ctt \ ctt.exe s:C:... \ Web.config t:C:... \ Web.Release .config d:C:... \ Web.config pw i
[命令] C:... \ ctt \ ctt.exe s:C:... \ Web.config t:C:... \ Web。 Development.config d:C:... \ Web.config pw我
成功应用了XML转换
...



对于需要.config转换的非Web应用程序

使您的.config文件进入发布管道可能有几种方法。这是两个。

  1. 您的发行版应具有对工件的“访问”权限,作为工件的一部分,这将确保部署代理下载源(不希望的IMHO)。

  2. 您需要将web。[stage] .config文件包含在构建工件中,并带有复制任务,或者将其拾取的最小匹配项。

一旦.config文件可用于发布管道

您可以使用文件转换任务XDT转换任务来执行转换操作。


选项2是我走的路线。

这是该任务对我的外观的图像。

在此处输入图片说明

该任务将配置放入构建中的构件中,然后可以在发布管道中使用该构件,而无需重新构建xx次。

在此处输入图片说明