简体   繁体   中英

How do I auto-increment nuget package version using VSTS build process?

In this video from MSDN at the 3:34 second mark, the presenter shows how to append the Build ID to a nuget's version. In the MSBuild arguments, he specifies:

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

So, when the project is built by VSTS, the nuget assembly's revision number is using the build id.

I would like to do something similar. Instead of hard coding the 1.0 in the build definition, I'd like to retrieve that from .csproj file. I am using the new .csproj file which stores nuget information.

For example, I'd like to specify in the csproj:

<Version>0.0.1-beta</Version>

Then, VSTS would append the BuildID and generate the assembly version as 0.0.0.1-beta.49 (49 being the build id)

I ended up doing the opposite of what Shayki Abramczyk suggested.

I use a task called "Variables Task Pack". It can be found here (and is free at the time of this answer): https://marketplace.visualstudio.com/items?itemName=YodLabs.VariableTasks#qna

Using this task, I set two variable: $(BuildId) and $(ReleaseType). See the settings snapshots at the end of the answer.

Then, in my CSPROJ project file, I modified the nuget version to use the two environment variables. Here's a clip of the project file:

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

IMPORTANT: Notice the extra 0 in front of $(BuildId). I had to add that in order to build locally. Without it, the build failed with an incorrect version format error.

Now, after building, I get the buildid as my revision number and release type appended.

Here are the screen shots showing configuration of both variables.

BuildId变量的设置 ReleaseType变量的设置

You can create a Power Shell script that retrieves the version from csproj file, then add the version to a new environment variable with this command: Set-VstsTaskVariable

For Example:

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

Now you can use the CSPROJ_ID variable on the MSBuild arguments:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM