From 4e9640c569e8f05c990e148ad2674ff67611382a Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Wed, 17 Jun 2020 11:15:36 -0700 Subject: Change AssemblyNameReader to better match GetAsemblyIdentityFromFile() --- .../Bind/AssemblyNameReader.cs | 24 +++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/WixToolset.Core.WindowsInstaller') diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/AssemblyNameReader.cs b/src/WixToolset.Core.WindowsInstaller/Bind/AssemblyNameReader.cs index 2f38fc68..2103cd32 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/AssemblyNameReader.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/AssemblyNameReader.cs @@ -29,7 +29,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind var name = ReadString(reader, assembly.Name); var culture = ReadString(reader, assembly.Culture); - var architecture = headers.PEHeader.Magic == PEMagic.PE32Plus ? "AMD64" : (headers.CorHeader.Flags & CorFlags.Requires32Bit) == CorFlags.Requires32Bit ? "x86" : (headers.CorHeader.Flags & CorFlags.ILOnly) == CorFlags.ILOnly ? "MSIL" : null; + var architecture = ArchitectureFromHeaders(headers); var version = assembly.Version.ToString(); var publicKeyToken = ReadPublicKeyToken(reader, assembly.PublicKey); @@ -144,6 +144,28 @@ namespace WixToolset.Core.WindowsInstaller.Bind return new AssemblyName(win32Name, null, win32Version, null, win32ProcessorArchitecture, win32PublicKeyToken, win32Type); } + private static string ArchitectureFromHeaders(PEHeaders headers) + { + if (headers.PEHeader.Magic == PEMagic.PE32Plus) + { + return "AMD64"; + } + else if ((headers.CorHeader.Flags & CorFlags.Requires32Bit) == CorFlags.Requires32Bit) + { + return "x86"; + } + else if ((headers.CorHeader.Flags & CorFlags.ILOnly) == CorFlags.ILOnly) + { + return "MSIL"; + } + else + { + // We return "x86" here because that seems to best match the Fusion-based + // GetAssemblyIdentityFromFile() method of acquiring the assembly identity. + return "x86"; + } + } + private static string ReadString(MetadataReader reader, StringHandle handle) { return handle.IsNil ? null : reader.GetString(handle); -- cgit v1.2.3-55-g6feb