如何以编程方式检查托管程序集是x86,x64还是AnyCPU?

时间:2012-02-27 18:27:19

标签: c# .net compilation x86-64

我需要以编程方式确定程序集是x86,x64还是AnyCPU?有一个几乎相同的question,但它提供的解决方案

Assembly assembly = Assembly.LoadFrom(fileName);
PortableExecutableKinds peKind;
ImageFileMachine imageFileMachine;
assembly.ManifestModule.GetPEKind(out peKind, out imageFileMachine);
尝试从32位进程加载64位程序集时,

失败(反之亦然)。

是否有一种以编程方式查找程序集的编译类型的万无一失的方法?

编辑:基于@BenVoigt的建议,我创建了一个small command line utility来检查DLL是否被管理以及它是否是x86 / x64 / AnyCPU。我希望有人觉得它很有用。

2 个答案:

答案 0 :(得分:15)

这个问题已被涵盖:

但答案不完整,建议使用Assembly.LoadFrom。这是一个可怕的想法,因为它会从程序集中运行代码,除非失败,如果位数与您的过程不匹配。

相反,您应该使用Assembly.ReflectionOnlyLoadFrom。这使您可以在不实际加载任何代码的情况下读取元数据,因此不需要架构正确。

答案 1 :(得分:1)

在这里可以找到如何仅通过代码来确定这一点的解决方案,而无需反思或第三方软件: 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