Reputation: 61646
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.
Upvotes: 7
Views: 3877
Reputation: 1624
Solution how to determinate this just by code without reflection nor thirdparty SW can be found here: How to determine if a .NET assembly was built with platform target AnyCPU, AnyCPU Prefer32-bit, x86, x64 without using reflection and third party SW
Upvotes: 1
Reputation: 283911
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.
Upvotes: 15