简体   繁体   中英

How to check programmatically whether a managed assembly is x86, x64 or AnyCPU?

I need to determine programmatically whether an assembly is x86, x64 or AnyCPU? There is an almost identical question , but the solution that it provides

Assembly assembly = Assembly.LoadFrom(fileName);
PortableExecutableKinds peKind;
ImageFileMachine imageFileMachine;
assembly.ManifestModule.GetPEKind(out peKind, out imageFileMachine);

fails when trying to load a 64-bit assembly from a 32-bit process (and vice versa).

Is there a foolproof way of programmatically finding out the compilation type of an assembly?

EDIT: Based on @BenVoigt suggestion, I created a small command line utility that checks whether the DLL is managed or not and whether its x86/x64/AnyCPU. I hope someone finds it useful.

This question's been covered already:

But the answers are incomplete, suggesting use of Assembly.LoadFrom . That's a terrible idea, since it will run code from the assembly, in addition to failing if the bitness doesn't match your process.

Instead, you should use Assembly.ReflectionOnlyLoadFrom . This lets you read the metadata without actually loading any code, and therefore there's no need for the architecture to be correct.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM