eng/build/Version.props (21 lines of code) (raw):

<Project> <!-- Import the first 'Directory.Version.props' seen from project being built up. This allows each directory cone to set its own versioning at the time this file needs it set. --> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), Directory.Version.props))/Directory.Version.props" Condition="'$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), Directory.Version.props))' != ''" /> <PropertyGroup> <VersionPrefix Condition="'$(VersionPrefix)' == ''">1.0.0</VersionPrefix> <_BuildNumber>$([System.DateTime]::Now.ToString(yyyyMMdd))</_BuildNumber> <_BuildNumberYY>$(_BuildNumber.Substring(2, 2))</_BuildNumberYY> <_BuildNumberMM>$(_BuildNumber.Substring(4, 2))</_BuildNumberMM> <_BuildNumberDD>$(_BuildNumber.Substring(6, 2))</_BuildNumberDD> <!-- The build number should be < 65,535 (Windows limitation). We convert into a short date to accommodate that. --> <!-- SHORT_DATE := yy * 1000 + MM * 50 + dd --> <BuildNumber>$([MSBuild]::Add($([MSBuild]::Add($([MSBuild]::Multiply($(_BuildNumberYY), 1000)), $([MSBuild]::Multiply($(_BuildNumberMM), 50)))), $(_BuildNumberDD)))</BuildNumber> <BuildCounter Condition="'$(BUILD_COUNTER)' != ''">$(BUILD_COUNTER)</BuildCounter> <BuildCounter Condition="'$(BuildCounter)' == ''">0</BuildCounter> <!-- Major.Minor.Patch -> Major.Minor.0.0 --> <AssemblyVersion>$(VersionPrefix.Substring(0, $(VersionPrefix.LastIndexOf('.')))).0.0</AssemblyVersion> </PropertyGroup> <PropertyGroup Condition="'$(CI)' != 'true'"> <!-- Constant file version for local dev. --> <FileVersion>42.42.42.4242</FileVersion> </PropertyGroup> <PropertyGroup Condition="'$(CI)' == 'true'"> <FileVersion>$(VersionPrefix).$(BuildNumber)</FileVersion> </PropertyGroup> </Project>