我可以通过在c#中以编程方式加载dll来获得处理器架构吗?
有没有可以做到这一点的课程?
我需要知道dll是x86,x64,MSIL等。
答案 0 :(得分:9)
假设您只查看.net程序集,可以使用CorFlags.exe查看图像的标题。
This blog post解释了确定如何阅读结果的用法。摘录:
用法:Corflags.exe程序集[选项]
如果未指定选项,则显示给定图像的标志。
...
以下是标题的每个组成部分:
版本:包含二进制文件所使用的.NET Redist版本 建。
CLR标题:2.0表示.Net 1.0或.Net 1.1(Everett)图像,而2.5表示.Net 2.0(Whidbey)图像。
CorFlags:这是通过OR'g特定的标志来计算的,以指示是否 图像是ILONLY,它的位数等等 由装载机使用。非正式:管理 允许图像包含原生图像 码。成为“anycpu”的图像应该是 只包含IL。
32BIT:即使您的图像只包含IL,它仍然可能 有平台依赖,32BIT flag用于区分“x86” 来自“anycpu”图像的图像。 64位 图像是由事实区分的 他们的PE型为PE32 + 最有趣的方面是PE和标头的32BIT标志。 这些组合起来指定组件 类型。这是他们的样子 喜欢:
- anycpu:PE = PE32和32BIT = 0
- x86:PE = PE32且32BIT = 1
- 64位:PE = PE32 +和32BIT = 0
答案 1 :(得分:1)
试图通过加载程序集来找出鸡蛋和鸡蛋的主张。如果你没有得到BadImageFormatException,那么arch是合适的,你不再关心它是什么。如果你确实得到了异常,那么程序的配置是错误的。你无法在代码中做到这一点。
答案 2 :(得分:0)
您还可以使用FileStream读取程序集文件。 Windows可执行文件的格式在Microsoft pe / coff规范中指定。你可以在这里阅读:
http://www.microsoft.com/whdc/system/platform/firmware/pecoff.mspx