Azure DevOps - 将 MSBuild 属性作为参数传递给其他构建任务

Azure DevOps - Pass MSBuild properties as parameters to other build tasks

在 Azure DevOps 中,是否可以在生成任务期间导出 MSBuild 任务中定义的少量 MSBuild 属性,并将这些属性用作生成作业中其他任务的变量?


用例:构建期间计算的版本号

我们创建了一个 MSBuild 任务,作为构建的一部分,它根据 git 标记确定版本号。 MSBuild 任务使用它来设置程序集版本以及打包为构建一部分的可能的 nuget 包。

现在,在设置 Azure DevOps 构建管道时,我有一个单独的步骤来构建服务的安装程序(.msi 使用 Advanced Installer)。 我需要获取在 MSBuild 任务期间确定的版本并将其传递给 Advanced Installer 构建任务,以便对其进行相应的版本控制。如何实现?


作为解决方法,我们之前一直使用单独的构建任务,其中版本已使用 bash 脚本确定。然后导出到 VSO 变量并传递给两个任务,MSBuildAdvanced Installer build(MSBuild 任务可以使用预定义的 属性版本值)。现在我想摆脱计算版本的重复方式。

只要不关闭 msbuild 的控制台日志记录,就可以在 csproj 文件中使用 logging commands

<Target Name="SetAzureDevOpsVariables" BeforeTargets="BeforeBuild">
  <Message Importance="high"
           Text="##vso[task.setvariable variable=ProductVersion]$(Version)" />
</Target>

$(Version) 将被 msbuild 替换为 属性 的值(您可以使用 PackageVersionFileVersion 等),代理将解释命令来自 MSBuild 的输出。 Importance="high" 将确保即使在日志详细程度降低时也能打印消息。

请注意,您还可以在 <Target> 元素上放置一个 Condition="'$(SYSTEM_TEAMPROJECTID)' != ''" 以仅 运行 Azure DevOps 构建上的此输出。