I am trying to implement CI for one of my projects that generates a NuGet package which is published to our private NuGet repository. Obviously, for dependent applications to see the new packages as upgrades, they must have higher version numbers. To achieve this, we are letting MS Build append the build number to the end of the package version using the AssemblyInformationalVersionAttribute. While this seems to work great, the build number will recycle when it reaches 65535 meaning it is possible to have builds with the same major, minor and patch version but a smaller build number that are actually newer than those with a larger build number.

We are using VS 2015 (so MS Build 14), Git for source control and Jenkins to run our build jobs in an enterprise environment where there are a large number of other jobs running.

I'm looking for best practices and solutions for managing NuGet package versioning in a CI process given these constraints.


We're using GitVersion along with a GitVersion.yml file and GitFlow-based branches in Git to handle this. The GitVersion.yml file sets the base version of the item, e.g. 1.2.3 while GitVersion assigns the last part based upon the number of commits. This is highly customizable.

We allow GitVersion to update the versions in our AssemblyInfo.cs files which includes an informational version containing the branch and Git hash that produced the build. For our NuGet packages, the branch determines if they're unstable (develop) or stable (release/master with tag).

There are plug-ins for msbuild as well as TFS/VSTS to allow you to run GitVersion as part of a build. Since you can run GitVersion.exe from the command-line, it should integrate nicely with Jenkins.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.