dotnet-installer/scripts/dotnet-cli-build/Utils/BuildVersion.cs

44 lines
1.8 KiB
C#
Raw Normal View History

2016-02-16 22:02:50 +00:00
namespace Microsoft.DotNet.Cli.Build
2016-02-02 18:04:50 +00:00
{
public class BuildVersion
{
public int Major { get; set; }
public int Minor { get; set; }
public int Patch { get; set; }
public int CommitCount { get; set; }
public string CommitCountString => CommitCount.ToString("000000");
public string ReleaseSuffix { get; set; }
2016-02-16 22:02:50 +00:00
public string SimpleVersion => $"{Major}.{Minor}.{Patch}.{CommitCountString}";
public string VersionSuffix => $"{ReleaseSuffix}-{CommitCountString}";
2016-02-02 18:04:50 +00:00
public string NuGetVersion => $"{Major}.{Minor}.{Patch}-{VersionSuffix}";
public string ProductionVersion => $"{Major}.{Minor}.{Patch}";
2016-02-02 18:04:50 +00:00
public string GenerateMsiVersion()
{
// MSI versioning
// Encode the CLI version to fit into the MSI versioning scheme - https://msdn.microsoft.com/en-us/library/windows/desktop/aa370859(v=vs.85).aspx
// MSI versions are 3 part
// major.minor.build
// Size(bits) of each part 8 8 16
// So we have 32 bits to encode the CLI version
// Starting with most significant bit this how the CLI version is going to be encoded as MSI Version
// CLI major -> 6 bits
// CLI minor -> 6 bits
// CLI patch -> 6 bits
// CLI commitcount -> 14 bits
var major = Major << 26;
var minor = Minor << 20;
var patch = Patch << 14;
var msiVersionNumber = major | minor | patch | CommitCount;
var msiMajor = (msiVersionNumber >> 24) & 0xFF;
var msiMinor = (msiVersionNumber >> 16) & 0xFF;
var msiBuild = msiVersionNumber & 0xFFFF;
return $"{msiMajor}.{msiMinor}.{msiBuild}";
}
}
}