From 6d99ab14940b54c217e0f9ce6ffe166c9796d40a Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Tue, 11 Dec 2018 16:22:00 +0100 Subject: [PATCH] Fix #787: Incorrect display assembly Architecture for Managed C++ --- ILSpy/Languages/Language.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/ILSpy/Languages/Language.cs b/ILSpy/Languages/Language.cs index 5c253e0fd..8a58e5613 100644 --- a/ILSpy/Languages/Language.cs +++ b/ILSpy/Languages/Language.cs @@ -497,15 +497,17 @@ namespace ICSharpCode.ILSpy public static string GetPlatformDisplayName(PEFile module) { var architecture = module.Reader.PEHeaders.CoffHeader.Machine; - var flags = module.Reader.PEHeaders.CorHeader.Flags; + var characteristics = module.Reader.PEHeaders.CoffHeader.Characteristics; + var corflags = module.Reader.PEHeaders.CorHeader.Flags; switch (architecture) { case Machine.I386: - if ((flags & CorFlags.Prefers32Bit) != 0) + if ((corflags & CorFlags.Prefers32Bit) != 0) return "AnyCPU (32-bit preferred)"; - else if ((flags & CorFlags.Requires32Bit) != 0) + // According to ECMA-335, II.25.3.3.1 CorFlags.Requires32Bit and Characteristics.Bit32Machine must be in sync + // for assemblies containing managed code. However, this is not true for C++/CLI assemblies. + if ((corflags & CorFlags.Requires32Bit) != 0 || (characteristics & Characteristics.Bit32Machine) != 0) return "x86"; - else - return "AnyCPU (64-bit preferred)"; + return "AnyCPU (64-bit preferred)"; case Machine.Amd64: return "x64"; case Machine.IA64: