在Azure DevOps中,是否可以在构建任务期间导出在MSBuild任务中定义的几个MSBuild属性,并将其用作构建作业中其他任务的变量?
用例:构建期间计算出的版本号
我们创建了一个MSBuild任务,作为构建的一部分,该任务从git标记确定版本号。 MSBuild任务使用它来设置程序集版本以及作为构建的一部分打包的可能的nuget软件包。
现在,在设置Azure DevOps构建管道时,我有一个单独的步骤来为服务构建安装程序(使用Advanced Installer使用.msi)。 我需要获取在MSBuild任务期间确定的版本,并将其传递给Advanced Installer构建任务,以便可以对其进行相应的版本控制。如何实现?
作为一种解决方法,我们之前一直使用单独的构建任务,其中版本是使用bash脚本确定的。然后导出到VSO变量中,并传递给 MSBuild 和 Advanced Installer构建这两个任务(MSBuild任务可以使用预定义的属性作为版本值)。现在,我想摆脱计算版本的重复方法。
答案 0 :(得分:3)
只要不关闭msbuild的控制台日志记录,就可以在csproj文件中使用logging commands:
<Target Name="SetAzureDevOpsVariables" BeforeTargets="BeforeBuild">
<Message Importance="high"
Text="##vso[task.setvariable variable=ProductVersion]$(Version)" />
</Target>
$(Version)
将被msbuild替换为该属性的值(可以使用PackageVersion
,FileVersion
等),并且代理将从MSBuild的输出中解释命令。 Importance="high"
即使在减少日志详细程度的情况下,也可以确保打印消息。
请注意,您还可以在Condition="'$(SYSTEM_TEAMPROJECTID)' != ''"
元素上放置<Target>
,以仅在Azure DevOps构建上运行此输出。