MSBuild / dotnet – automatically update .csproj version with git commit/revision number via build targets

First, create a property called _VersionPrefix in your .csproj:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Library</OutputType>
    <TargetFrameworks>netstandard2.1</TargetFrameworks>
<strong>    <_VersionPrefix>1.3.1</_VersionPrefix></strong>
  </PropertyGroup>
Code language: HTML, XML (xml)

Next, you’ll need to install the dotnet-setversion global tool:

dotnet tool install -g dotnet-setversion

Finally, add the following build targets:

  <Target Name="SetGitVersion" BeforeTargets="PreBuildEvent">
    <Exec Command="git log -n 1 --format=%25%25h -- ." ConsoleToMSBuild="true">
      <Output TaskParameter="ConsoleOutput" PropertyName="GitCommit" />
    </Exec>
    <Exec Command="git rev-list --count $(GitCommit)" ConsoleToMSBuild="true">
      <Output TaskParameter="ConsoleOutput" PropertyName="GitRevisionNumber" />
    </Exec>
  </Target>
  
  <Target Name="UpdateCsprojVersion" AfterTargets="SetVersionSuffix">
    <Exec Command="setversion $(_VersionPrefix)-r$(GitRevisionNumber).$(GitCommit)"></Exec>
  </Target>
</Project>Code language: HTML, XML (xml)

Leave a Reply