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

时间:2019-01-18 12:54:40

标签: azure-devops azure-pipelines azure-pipelines-release-pipeline

我在Azure Devops中建立了一个新的生成和部署管道。它是一个较旧的Web应用程序,其中包含一些用于web.config的转换文件。过去,我们会根据多少个环境来构建相同的代码x次。正如我从这里https://docs.microsoft.com/en-us/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.

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

在某些地方可以让我包含这些文件的设置吗?还是阻止他们转型?

1 个答案:

答案 0 :(得分:1)

对于Web应用程序

MSBuild根据以下设置/属性/参数(按顺序)知道如何transform the 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)知道如何基于Web中的<DependentUpon>Web.config</DependentUpon>元素来实现此目标。[configuration] .config项目或构建脚本文件中的项目。

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

  

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

警告文字指出:

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

现在,您需要根据File Transforms and Value Substitutions文档来组织发布管道。

Stage Named According to Desired Transformation

  

[节]开始:IIS Web App部署    
====================================   
任务:IIS Web App部署   
描述:使用Web Deploy部署网站或Web应用程序   
版本:0.0.51   
作者:微软公司   
帮助:More information    
====================================   ...
[命令] C:... \ ctt \ ctt.exe s:C:... \ Web.config t:C:... \ Web.Release.config d:C:。 .. \ Web.config pw我
  [命令] 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 Transform任务执行转换操作。


选项2是我走过的路线。

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

enter image description here

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

enter image description here