@joebigelow / wix / commits / 4e9640c5

Change AssemblyNameReader to better match GetAsemblyIdentityFromFile()

Rob Mensching committed Jun 17, 2020 at 11:15 UTC 4e9640c569e8f05c990e148ad2674ff67611382a
1 file changed +23 -1
src/WixToolset.Core.WindowsInstaller/Bind/AssemblyNameReader.cs
+23 -1
@@ -29,7 +29,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
29
30 var name = ReadString(reader, assembly.Name);
31 var culture = ReadString(reader, assembly.Culture);
32 - 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;
32 + var architecture = ArchitectureFromHeaders(headers);
33 var version = assembly.Version.ToString();
34 var publicKeyToken = ReadPublicKeyToken(reader, assembly.PublicKey);
35
@@ -144,6 +144,28 @@ namespace WixToolset.Core.WindowsInstaller.Bind
144 return new AssemblyName(win32Name, null, win32Version, null, win32ProcessorArchitecture, win32PublicKeyToken, win32Type);
145 }
146
147 + private static string ArchitectureFromHeaders(PEHeaders headers)
148 + {
149 + if (headers.PEHeader.Magic == PEMagic.PE32Plus)
150 + {
151 + return "AMD64";
152 + }
153 + else if ((headers.CorHeader.Flags & CorFlags.Requires32Bit) == CorFlags.Requires32Bit)
154 + {
155 + return "x86";
156 + }
157 + else if ((headers.CorHeader.Flags & CorFlags.ILOnly) == CorFlags.ILOnly)
158 + {
159 + return "MSIL";
160 + }
161 + else
162 + {
163 + // We return "x86" here because that seems to best match the Fusion-based
164 + // GetAssemblyIdentityFromFile() method of acquiring the assembly identity.
165 + return "x86";
166 + }
167 + }
168 +
169 private static string ReadString(MetadataReader reader, StringHandle handle)
170 {
171 return handle.IsNil ? null : reader.GetString(handle);