eng/build/Version.targets (15 lines of code) (raw):
<Project>
<!-- Local build versioning. By default we keep it simple. -->
<PropertyGroup Condition="'$(CI)' != 'true'">
<VersionSuffix Condition="'$(VersionSuffix)' != ''">$(VersionSuffix).$(BuildReason)</VersionSuffix>
<VersionSuffix Condition="'$(VersionSuffix)' == ''">$(BuildReason)</VersionSuffix>
<Version>$(VersionPrefix)-$(VersionSuffix)</Version>
</PropertyGroup>
<!-- CI versioning steps -->
<PropertyGroup Condition="'$(CI)' == 'true' AND '$(PublicRelease)' != 'true'">
<VersionSuffix Condition="'$(VersionSuffix)' != ''">$(VersionSuffix).$(BuildReason).$(BuildNumber).$(BuildCounter)</VersionSuffix>
<VersionSuffix Condition="'$(VersionSuffix)' == ''">$(BuildReason).$(BuildNumber).$(BuildCounter)</VersionSuffix>
<Version>$(VersionPrefix)-$(VersionSuffix)</Version>
</PropertyGroup>
<!-- When building in Azure pipelines, update the build number. -->
<!-- Specifically use '$(TF_BUILD)' and not '$(CI)' to ensure we are in Azure pipelines. -->
<Target Name="UpdateAzDoBuildNumber" Condition="'$(TF_BUILD)' == 'true' AND '$(UpdateBuildNumber)' == 'true'" BeforeTargets="BeforeBuild">
<Message Importance="high" Text="##vso[build.updatebuildnumber]$(Version)" />
</Target>
</Project>