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

Gon*_*gle 1 msbuild msbuild-task azure-devops

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


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

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

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


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

Mar*_*ich 5

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

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

$(Version)将由的msbuild与属性的值被取代(可以使用PackageVersionFileVersion等),代理将解释从MSBuild的输出内容的命令。Importance="high"将确保即使减少日志详细程度也会打印消息。

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

  • 您还可以将其放入根目录中的“Directory.Build.targets”文件中,或者在构建过程中将扩展目标放入诸如“obj\projectfile.csproj.customext.targets”之类的项目扩展中。 (2认同)