如何使用VSTS构建过程自动增加nuget软件包的版本?

时间:2018-07-24 07:38:15

标签: c# msbuild nuget azure-devops devops

在MSDN(https://channel9.msdn.com/Events/Build/2018/THR5057)的此视频中,标记为3:34秒,演示者演示了如何将Build ID附加到nuget的版本。他在MSBuild参数中指定:

/ t:pack /p:PackageVersion=1.0。$(Build.BuildId)

因此,当项目由VSTS生成时,nuget程序集的修订版号将使用生成ID。

我想做类似的事情。与其在构建定义中对1.0进行硬编码,我想从.csproj文件中检索它。我正在使用新的.csproj文件来存储nuget信息。

例如,我想在csproj中指定:

0.0.1-beta

然后,VSTS将附加BuildID并生成程序集版本为0.0.0.1-beta.49(49是构建ID)

2 个答案:

答案 0 :(得分:1)

我最终的行为与Shayki Abramczyk提出的相反。

我使用了一个名为“变量任务包”的任务。可以在这里找到(并且在获得此答案时是免费的):https://marketplace.visualstudio.com/items?itemName=YodLabs.VariableTasks#qna

使用此任务,我设置了两个变量:$(BuildId)和$(ReleaseType)。请参阅答案末尾的设置快照。

然后,在CSPROJ项目文件中,我修改了nuget版本以使用两个环境变量。这是项目文件的片段:

<PropertyGroup>
     <Version>0.0.0.0$(BuildId)$(ReleaseType)</Version>
     <FileVersion>0.0.0.0$(BuildId)$(ReleaseType)</FileVersion>
    ...
</PropertyGroup>

重要提示:请注意$(BuildId)前面的多余0。我必须添加它才能在本地构建。没有它,构建会因版本格式错误而失败。

现在,构建后,我得到了buildid作为我的修订号和发布类型的附件。

以下是显示两个变量的配置的屏幕截图。

Settings for BuildId variable Settings for ReleaseType variable

答案 1 :(得分:0)

您可以创建一个Power Shell脚本,该脚本从csproj文件中检索版本,然后使用以下命令将版本添加到新的环境变量中:Set-VstsTaskVariable

例如:

$csprojId = $retrivedIdfromTheFile
Set-VstsTaskVariable -Name "CSPROJ_ID" -Value $csprojId

现在,您可以在MSBuild参数上使用CSPROJ_ID变量:

/p:PackageVersion=$(CSPROJ_ID).$(Build.BuildId)