【发布时间】:2010-11-15 15:58:08
【问题描述】:
我可以通过在 c# 中以编程方式加载 dll 来获得处理器架构吗?
有没有一个类可以做到这一点?
我需要知道 dll 是 x86、x64、MSIL 等。
【问题讨论】:
标签: c# .net architecture dll processor
我可以通过在 c# 中以编程方式加载 dll 来获得处理器架构吗?
有没有一个类可以做到这一点?
我需要知道 dll 是 x86、x64、MSIL 等。
【问题讨论】:
标签: c# .net architecture dll processor
假设您只查看 .net 程序集,您可以使用 CorFlags.exe 查看图像的标题。
This blog post 解释了确定如何读取结果的用法。摘录:
用法:Corflags.exe 程序集[选项]
如果没有指定选项,则显示给定图像的标志。
...
以下是标题中每个组件的含义:
版本:包含二进制文件所使用的 .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
【讨论】:
试图通过加载程序集来找出答案是一个先有鸡还是先有蛋的命题。如果您没有得到 BadImageFormatException,那么拱门是合适的,您不再关心它是什么。如果你确实得到了异常,那么程序的配置是错误的。在代码中你无能为力。
【讨论】:
ReflectionOnlyLoadFrom。 stackoverflow.com/q/9470199/103167
您还可以使用 FileStream 读取程序集文件。 Windows 可执行文件的格式在 Microsoft pe/coff 规范中指定。你可以在这里阅读:
http://www.microsoft.com/whdc/system/platform/firmware/pecoff.mspx
【讨论】: