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);