aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Arnson <bob@firegiant.com>2021-10-08 10:59:34 -0400
committerBob Arnson <bob@firegiant.com>2021-10-08 13:59:00 -0400
commitbbf6449da7dd477999b877402fea546eb0801911 (patch)
treed177919c5b7b31bbbde728506a94f04ae50f465f
parentfad58e4d2bbd8e451cdb725325a5d760b4d1a684 (diff)
downloadwix-bbf6449da7dd477999b877402fea546eb0801911.tar.gz
wix-bbf6449da7dd477999b877402fea546eb0801911.tar.bz2
wix-bbf6449da7dd477999b877402fea546eb0801911.zip
Fix assembly harvesting for NetFx 1.x assemblies.
Don't harvest MSIL `processorArchitecture` for 1.x assemblies. This matches WiX v3 behavior.
-rw-r--r--src/wix/WixToolset.Core.WindowsInstaller/Bind/AssemblyNameReader.cs14
-rw-r--r--src/wix/test/WixToolsetTest.CoreIntegration/MsiFixture.cs55
-rw-r--r--src/wix/test/WixToolsetTest.CoreIntegration/TestData/Assembly1x/Package.en-us.wxl11
-rw-r--r--src/wix/test/WixToolsetTest.CoreIntegration/TestData/Assembly1x/Package.wxs17
-rw-r--r--src/wix/test/WixToolsetTest.CoreIntegration/TestData/Assembly1x/PackageComponents.wxs10
-rw-r--r--src/wix/test/WixToolsetTest.CoreIntegration/TestData/Assembly1x/data/candle.exebin0 -> 28672 bytes
6 files changed, 105 insertions, 2 deletions
diff --git a/src/wix/WixToolset.Core.WindowsInstaller/Bind/AssemblyNameReader.cs b/src/wix/WixToolset.Core.WindowsInstaller/Bind/AssemblyNameReader.cs
index 2103cd32..5dcfa1e6 100644
--- a/src/wix/WixToolset.Core.WindowsInstaller/Bind/AssemblyNameReader.cs
+++ b/src/wix/WixToolset.Core.WindowsInstaller/Bind/AssemblyNameReader.cs
@@ -37,8 +37,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
37 // to be equal to or longer than the "fileVersion" in length when its present; 37 // to be equal to or longer than the "fileVersion" in length when its present;
38 // the workaround is to prepend zeroes to the last version number in the assembly 38 // the workaround is to prepend zeroes to the last version number in the assembly
39 // version. 39 // version.
40 var targetNetfx1 = (headers.CorHeader.MajorRuntimeVersion == 2) && (headers.CorHeader.MinorRuntimeVersion == 0); 40 if (IsNetFx1xAssembly(headers) && !String.IsNullOrEmpty(fileVersion) && fileVersion.Length > version.Length)
41 if (targetNetfx1 && !String.IsNullOrEmpty(fileVersion) && fileVersion.Length > version.Length)
42 { 41 {
43 var versionParts = version.Split('.'); 42 var versionParts = version.Split('.');
44 43
@@ -154,6 +153,12 @@ namespace WixToolset.Core.WindowsInstaller.Bind
154 { 153 {
155 return "x86"; 154 return "x86";
156 } 155 }
156 else if (IsNetFx1xAssembly(headers))
157 {
158 // .NET Framework 1.x didn't support 64-bit, so if the assembly isn't explicitly 32-bit-required,
159 // the architecture wasn't specified, unlike .NET 2.0 and later, which identify it as MSIL.
160 return null;
161 }
157 else if ((headers.CorHeader.Flags & CorFlags.ILOnly) == CorFlags.ILOnly) 162 else if ((headers.CorHeader.Flags & CorFlags.ILOnly) == CorFlags.ILOnly)
158 { 163 {
159 return "MSIL"; 164 return "MSIL";
@@ -166,6 +171,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
166 } 171 }
167 } 172 }
168 173
174 private static bool IsNetFx1xAssembly(PEHeaders headers)
175 {
176 return headers.CorHeader.MajorRuntimeVersion == 2 && headers.CorHeader.MinorRuntimeVersion == 0;
177 }
178
169 private static string ReadString(MetadataReader reader, StringHandle handle) 179 private static string ReadString(MetadataReader reader, StringHandle handle)
170 { 180 {
171 return handle.IsNil ? null : reader.GetString(handle); 181 return handle.IsNil ? null : reader.GetString(handle);
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/MsiFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/MsiFixture.cs
index 3bdfa0ef..ff241b50 100644
--- a/src/wix/test/WixToolsetTest.CoreIntegration/MsiFixture.cs
+++ b/src/wix/test/WixToolsetTest.CoreIntegration/MsiFixture.cs
@@ -596,6 +596,61 @@ namespace WixToolsetTest.CoreIntegration
596 } 596 }
597 597
598 [Fact] 598 [Fact]
599 public void CanBuildWithNet1xAssembly()
600 {
601 var folder = TestData.Get(@"TestData\Assembly1x");
602
603 using (var fs = new DisposableFileSystem())
604 {
605 var baseFolder = fs.GetFolder();
606 var intermediateFolder = Path.Combine(baseFolder, "obj");
607
608 var result = WixRunner.Execute(new[]
609 {
610 "build",
611 Path.Combine(folder, "Package.wxs"),
612 Path.Combine(folder, "PackageComponents.wxs"),
613 "-loc", Path.Combine(folder, "Package.en-us.wxl"),
614 "-bindpath", Path.Combine(folder, "data"),
615 "-intermediateFolder", intermediateFolder,
616 "-o", Path.Combine(baseFolder, @"bin\test.msi")
617 });
618
619 result.AssertSuccess();
620
621 Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.msi")));
622 Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.wixpdb")));
623 Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\PFiles\AssemblyMsiPackage\candle.exe")));
624
625 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
626 var section = intermediate.Sections.Single();
627
628 var fileSymbol = section.Symbols.OfType<FileSymbol>().Single();
629 Assert.Equal(Path.Combine(folder, @"data\candle.exe"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
630 Assert.Equal(@"candle.exe", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
631
632 var msiAssemblyNameSymbols = section.Symbols.OfType<MsiAssemblyNameSymbol>();
633 Assert.Equal(new[]
634 {
635 "culture",
636 "fileVersion",
637 "name",
638 "publicKeyToken",
639 "version"
640 }, msiAssemblyNameSymbols.OrderBy(a => a.Name).Select(a => a.Name).ToArray());
641
642 Assert.Equal(new[]
643 {
644 "neutral",
645 "2.0.5805.0",
646 "candle",
647 "CE35F76FCDA82BAD",
648 "2.0.5805.0",
649 }, msiAssemblyNameSymbols.OrderBy(a => a.Name).Select(a => a.Value).ToArray());
650 }
651 }
652
653 [Fact]
599 public void CanBuild64bit() 654 public void CanBuild64bit()
600 { 655 {
601 var folder = TestData.Get(@"TestData\SingleFile"); 656 var folder = TestData.Get(@"TestData\SingleFile");
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Assembly1x/Package.en-us.wxl b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Assembly1x/Package.en-us.wxl
new file mode 100644
index 00000000..38c12ac1
--- /dev/null
+++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Assembly1x/Package.en-us.wxl
@@ -0,0 +1,11 @@
1<?xml version="1.0" encoding="utf-8"?>
2
3<!--
4This file contains the declaration of all the localizable strings.
5-->
6<WixLocalization xmlns="http://wixtoolset.org/schemas/v4/wxl" Culture="en-US">
7
8 <String Id="DowngradeError">A newer version of [ProductName] is already installed.</String>
9 <String Id="FeatureTitle">MsiPackage</String>
10
11</WixLocalization>
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Assembly1x/Package.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Assembly1x/Package.wxs
new file mode 100644
index 00000000..c345305d
--- /dev/null
+++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Assembly1x/Package.wxs
@@ -0,0 +1,17 @@
1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
2 <Package Name="AssemblyMsiPackage" Language="1033" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a" Compressed="no" InstallerVersion="200" Scope="perMachine">
3
4
5 <MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />
6
7 <Feature Id="ProductFeature" Title="!(loc.FeatureTitle)">
8 <ComponentGroupRef Id="ProductComponents" />
9 </Feature>
10 </Package>
11
12 <Fragment>
13 <StandardDirectory Id="ProgramFilesFolder">
14 <Directory Id="INSTALLFOLDER" Name="AssemblyMsiPackage" />
15 </StandardDirectory>
16 </Fragment>
17</Wix>
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Assembly1x/PackageComponents.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Assembly1x/PackageComponents.wxs
new file mode 100644
index 00000000..e0c84c63
--- /dev/null
+++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Assembly1x/PackageComponents.wxs
@@ -0,0 +1,10 @@
1<?xml version="1.0" encoding="utf-8"?>
2<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3 <Fragment>
4 <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
5 <Component>
6 <File Source="candle.exe" Assembly=".net" />
7 </Component>
8 </ComponentGroup>
9 </Fragment>
10</Wix>
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Assembly1x/data/candle.exe b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Assembly1x/data/candle.exe
new file mode 100644
index 00000000..7a16cbab
--- /dev/null
+++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Assembly1x/data/candle.exe
Binary files differ