【问题标题】:How to check programmatically whether a managed assembly is x86, x64 or AnyCPU?如何以编程方式检查托管程序集是 x86、x64 还是 AnyCPU?
【发布时间】:2012-03-17 05:33:43
【问题描述】:

我需要以编程方式确定程序集是 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。我希望有人觉得它有用。

【问题讨论】:

  • 你试过ReflectionOnlyLoadFrom吗?
  • @BenVoigt 这很可能是一个答案,而不是评论:)
  • @BenVoigt 我现在做了,你是绝对正确的。让它成为答案,我会接受的。

标签: c# .net compilation x86-64


【解决方案1】:

这个问题已经讨论过了:

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

相反,您应该使用Assembly.ReflectionOnlyLoadFrom。这使您无需实际加载任何代码即可读取元数据,因此无需架构正确。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-03-20
      • 2011-03-29
      • 2013-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 2010-12-22
      相关资源
      最近更新 更多