5

我可以通过在 c# 中以编程方式加载 dll 来获得处理器架构吗?

有没有一个类可以做到这一点?

我需要知道 dll 是 x86、x64、MSIL 等。

4

3 回答 3

9

假设您只查看 .net 程序集,您可以使用CorFlags.exe查看图像的标题。

这篇博文解释了确定如何读取结果的用法。摘抄:

用法:Corflags.exe 程序集 [选项]

如果未指定选项,则显示给定图像的标志。

...

以下是标头的每个组件的含义:

Version:包含构建二进制文件的 .NET Redist 版本。

CLR Header:2.0 表示 .Net 1.0 或 .Net 1.1 (Everett) 图像,而 2.5 表示 .Net 2.0 (Whidbey) 图像。

CorFlags:这是由 OR'g 特定标志计算的,以指示图像是否为 ILONLY、其位数等,并由加载程序使用。ILONLY:托管映像允许包含本机代码。要成为“anycpu”,图像应仅包含 IL。

32BIT:即使您有一个仅包含 IL 的图像,它仍然可能具有平台依赖性,32BIT 标志用于区分“x86”图像和“anycpu”图像。64 位图像的区别在于它们的 PE 类型为 PE32+。
最有趣的方面是标头的 PE 和 32BIT 标志。这些结合起来指定程序集类型。以下是它们的外观:

  • anycpu:PE = PE32 和 32BIT = 0
  • x86:PE = PE32 和 32BIT = 1
  • 64 位:PE = PE32+ 和 32BIT = 0
于 2010-12-01T14:11:45.253 回答
1

试图通过加载程序集来找出答案是一个先有鸡还是先有蛋的命题。如果您没有收到 BadImageFormatException,那么拱门是合适的,您不再关心它是什么。如果你确实得到了异常,那么程序的配置是错误的。在代码中你无能为力。

于 2010-11-15T16:30:16.040 回答
0

您还可以使用 FileStream 读取程序集文件。Windows 可执行文件的格式在 Microsoft pe/coff 规范中指定。你可以在这里阅读它:

http://www.microsoft.com/whdc/system/platform/firmware/pecoff.mspx

于 2010-12-01T14:23:56.743 回答