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

时间:2018-10-21 10:34:24

标签: msbuild azure-devops msbuild-task

在Azure DevOps中,是否可以在构建任务期间导出在MSBuild任务中定义的几个MSBuild属性,并将其用作构建作业中其他任务的变量?


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

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

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


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

1 个答案:

答案 0 :(得分:3)

只要不关闭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"即使在减少日志详细程度的情况下,也可以确保打印消息。

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