如何获取程序集dll的处理器架构?

5

我能否通过在C#中以编程方式加载dll来获取处理器架构?

是否有一个类可以做到这一点?

我需要获取dll是x86、x64、MSIL等。

3个回答

9
假设您只查看 .net 程序集,您可以使用 CorFlags.exe 查看图像的标头。 这篇博客文章 解释了如何确定如何阅读结果的用法。 摘录:
用法:Corflags.exe Assembly [选项] 如果未指定任何选项,则显示给定图像的标志。
...
以下是标题每个组件的含义: 版本:包含 .NET Redist 的版本,该二进制文件与其构建。 CLR 标头:2.0 表示 .Net 1.0 或 .Net 1.1(Everett)映像,而 2.5 表示 .Net 2.0(Whidbey)映像。 CorFlags:这是通过 OR 特定标志计算的,以指示映像是否为 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

哪个更好:1)AssemblyName.ProcessorArchitecture,2)CorFlags.exe(和Parser C# - Process.Start),3)ApiChange https://apichange.codeplex.com/或4)PE reader https://dev59.com/k3VC5IYBdhLWcg3whBaj#9767750? - Kiquenet
我安装了VS 2008、VS 2010、VS 2012和VS 2013。在C:\Program Files (x86)\Microsoft SDKs\Windows\的子文件夹中,我有8个CorFlags.exe文件。我应该使用哪一个? - Kiquenet

1

通过加载程序集来找出问题是一个先有鸡还是先有蛋的命题。如果没有收到BadImageFormatException异常,那么架构是正确的,你不再关心它是什么。如果收到了异常,那么程序的配置是错误的。在代码中无法解决这个问题。


除非您使用 ReflectionOnlyLoadFrom。https://dev59.com/qGDVa4cB1Zd3GeqPh-xM - Ben Voigt

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接