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

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

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

尝试从32位进程加载64位程序集时失败(反之亦然)。

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

编辑:基于@BenVoigt的建议,我创建了一个小命令行实用程序 ,用于检查DLL是否受管理以及是否为x86 / x64 / AnyCPU。 我希望有人觉得它很有用。

这个问题已被涵盖:

  • 如何判断.NET程序集是否编译为x86,x64或任何CPU
  • 如何确定.NET程序集是否为x86或x64构建?
  • 如何获得程序集dll的处理器体系结构?

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

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