【问题标题】:How can I get the processor architecture of an assembly dll? [duplicate]如何获得程序集 dll 的处理器架构? [复制]
【发布时间】:2010-11-15 15:58:08
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net architecture dll processor


    【解决方案1】:

    假设您只查看 .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

    【讨论】:

    • 什么更好:1) AssemblyName.ProcessorArchitecture,2) CorFlags.exe(和 Parser C# - Process.Start),3) ApiChange apichange.codeplex.com 或 4) PE reader stackoverflow.com/a/9767750/206730?跨度>
    • 我安装了 VS 2008、VS 2010、VS 2012 和 VS 2013。我在 C:\Program Files (x86)\Microsoft SDKs\Windows\ 的子文件夹中有 8 个文件 CorFlags.exe。我应该使用哪个?
    【解决方案2】:

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

    【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 2011-05-16
      相关资源
      最近更新 更多