diff --git a/src/wix/WixToolset.Core/ExtensibilityServices/BackendHelper.cs b/src/wix/WixToolset.Core/ExtensibilityServices/BackendHelper.cs index 43f7aa016..988ad60a3 100644 --- a/src/wix/WixToolset.Core/ExtensibilityServices/BackendHelper.cs +++ b/src/wix/WixToolset.Core/ExtensibilityServices/BackendHelper.cs @@ -120,16 +120,13 @@ public bool TryParseMsiProductVersion(string version, bool strict, out string pa { if (WixVersion.TryParse(version, out var wixVersion) && wixVersion.HasMajor && wixVersion.Major < 256 && wixVersion.Minor < 256 && wixVersion.Patch < 65536 && wixVersion.Labels == null && String.IsNullOrEmpty(wixVersion.Metadata)) { - parsedVersion = $"{wixVersion.Major}.{wixVersion.Minor}"; - - if (strict || wixVersion.HasPatch) + if (strict) { - parsedVersion += $".{wixVersion.Patch}"; + parsedVersion = $"{wixVersion.Major}.{wixVersion.Minor}.{wixVersion.Patch}"; } - - if (!strict && wixVersion.HasRevision) + else { - parsedVersion += $".{wixVersion.Revision}"; + parsedVersion = wixVersion.Prefix.HasValue ? version.Substring(1) : version; } return true; diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/VersionFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/VersionFixture.cs index cf8466aa1..4934933fa 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/VersionFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/VersionFixture.cs @@ -40,6 +40,62 @@ public void CanBuildMsiWithPrefixedVersion() } } + [Fact] + public void CanBuildMsiWithInsignificantZeroesVersion() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var msiPath = Path.Combine(baseFolder, "bin", "test1.msi"); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "Version", "PackageWithReplaceableVersion.wxs"), + "-bindpath", Path.Combine(folder, "SingleFile", "data"), + "-intermediateFolder", intermediateFolder, + "-d", "Version=0001.002.0003.04", + "-o", msiPath + }); + + result.AssertSuccess(); + + var productVersion = GetProductVersionFromMsi(msiPath); + Assert.Equal("0001.002.0003.04", productVersion); + } + } + + [Fact] + public void CanBuildMsiWithPrefixedInsignificantZeroesVersion() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var msiPath = Path.Combine(baseFolder, "bin", "test1.msi"); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "Version", "PackageWithReplaceableVersion.wxs"), + "-bindpath", Path.Combine(folder, "SingleFile", "data"), + "-intermediateFolder", intermediateFolder, + "-d", "Version=v01.002.0003.000004", + "-o", msiPath + }); + + result.AssertSuccess(); + + var productVersion = GetProductVersionFromMsi(msiPath); + Assert.Equal("01.002.0003.000004", productVersion); + } + } + [Fact] public void CanBuildMsiWithPrefixedVersionBindVariable() {