首页 > 解决方案 > 如果可用,将 VersionSuffix 设置为提交 id

问题描述

我正在尝试通过 environment variable 将我的 DLL 上的版本后缀设置为 Azure DevOps 上可用的 Git 提交 ID Build_SourceVersion。如果该环境变量不可用,则应将后缀设置为随机 GUID。我的Directory.Build.props文件如下所示:

<Project>
 <PropertyGroup>
   <VersionPrefix>2.1.0</VersionPrefix>
    <VersionSuffix Condition="'$(Test-Path env:Build_SourceVersion)' == 'True'">$((Get-Variable Build_SourceVersion).Substring(0, 7))</VersionSuffix>
    <VersionSuffix Condition="'$(Test-Path env:Build_SourceVersion)' == 'False'">$([System.Guid]::NewGuid().ToString(N).ToLower().Substring(0, 7))</VersionSuffix>
 </PropertyGroup>
</Project>

虽然当我构建我的 DLL 时没有设置任何产品版本。我在这里做错了什么?如果我尝试将DLL 设置为随机 GUID <VersionSuffix>$([System.Guid]::NewGuid().ToString(N).ToLower().Substring(0, 7))如果我尝试$((Get-Variable Build_SourceVersion).Substring(0, 7)),至少不会出现任何错误,但组合似乎不起作用。

标签: visual-studioazure-devops

解决方案


如果可用,将 VersionSuffix 设置为提交 id

当您想要从 MSBuild 引用 Azure devops 构建变量时,您需要引用代理设置的环境变量。

所以你可以在 MSBuild 中使用它$(Build_SourceVersion)而不是(Get-Variable Build_SourceVersion).

然后我们可以使用以下脚本来获取该Substring值:

  <PropertyGroup>
    <VersionSuffixTest>$(Build_SourceVersion)</VersionSuffixTest>
  </PropertyGroup>

  <PropertyGroup>
    <VersionPrefix>2.1.0</VersionPrefix>
    <VersionSuffix Condition="'$(VersionSuffixTest)' != ''">$(VersionSuffixTest.Substring(0, 7))</VersionSuffix>
  </PropertyGroup>

作为测试,我使用 MSBuild 目标输出该值:

<Target Name="TestTask" AfterTargets="Build">
  <Message Text="$(VersionPrefix)" Importance="high" />
  <Message Text="$(VersionSuffix)" Importance="high" />
</Target>

然后,我可以获得该值:

在此处输入图像描述

检查此线程此线程以获取一些详细信息。

希望这可以帮助。


推荐阅读