如何:查看程序集内容

您可以使用 Ildasm.exe(MSIL 反汇编程序) 来查看文件中的 Microsoft 中间语言 (MSIL) 信息。 如果所检查的文件是程序集,则此信息可包括程序集的特性以及对其他模块和程序集的引用。 此信息有助于确定文件是程序集还是程序集的一部分,以及文件是否具有对其他模块或程序集的引用。

使用 Ildasm.exe 显示程序集的内容

  • 在命令提示符处键入 ildasm <assembly name>。 例如,下面的命令反汇编 Hello.exe 程序集。

    ildasm Hello.exe
    

查看程序集清单信息

  • 在 MSIL Disassembler 窗口中双击 MANIFEST 图标。

示例

下面的示例以基本的“Hello, World”程序开始。 编译该程序之后,使用 Ildasm.exe 反汇编 Hello.exe 程序集并查看程序集清单。

Imports System

Class MainApp
    Public Shared Sub Main()
        Console.WriteLine("Hello World using Visual Basic!")
    End Sub
End Class
using System;

class MainApp
{
    public static void Main()
    {
        Console.WriteLine("Hello World using C#!");
    }
}
using namespace System;

class MainApp
{
public:
    static void Main()
    {
        Console::WriteLine("Hello World using C++/CLI!");
    }
};

int main()
{
    MainApp::Main();
}

在 Hello.exe 程序集上运行 ildasm.exe 命令,然后在 IL DASM 窗口中双击 MANIFEST 图标以生成以下输出:

// Metadata version: v4.0.30319
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 4:0:0:0
}
.assembly Hello
{
  .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78   // ....T..WrapNonEx
                                                                                                             63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 )       // ceptionThrows.
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}
.module Hello.exe
// MVID: {7C2770DB-1594-438D-BAE5-98764C39CCCA}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003       // WINDOWS_CUI
.corflags 0x00000001    //  ILONLY
// Image base: 0x00600000

下表描述了示例中所使用的 Hello.exe 程序集的程序集清单中的各项指令。

指令

说明

.assembly extern <程序集名称>

指定包含当前模块所引用项目的另一程序集(在此示例中为 mscorlib)。

.publickeytoken <标记>

指定所引用程序集的实际密钥的标记。

.ver <版本号>

指定引用程序集的版本号。

.assembly <程序集名称>

指定程序集名称。

.hash algorithm <int32 值>

指定使用的哈希算法。

.ver <版本号>

指定程序集的版本号。

.module <文件名>

指定组成程序集的模块名称, 在此示例中,程序集只包含一个文件。

.subsystem <>

指定程序要求的应用程序环境。 在此示例中,值 3 表示该可执行文件从控制台运行。

.corflags

当前是元数据中的一个保留字段。

根据程序集的内容,程序集清单可包含许多不同的指令。 有关程序集清单中指令的完整列表,请参阅 ECMA 文档,特别是“Partition II: Metadata Definition and Semantics”(第 2 部分:元数据定义和语义)和“Partition III: CIL Instruction Set”(第 3 部分:CIL 指令集)。 该文档可联机获得;请参见 MSDN 上的 ECMA C# and Common Language Infrastructure Standards(ECMA C# 和公共语言基础结构标准)和 Ecma International 网站上的 Standard ECMA-335 - Common Language Infrastructure (CLI)(标准 ECMA-335 - 公共语言基础结构 (CLI))。

请参见

参考

Ildasm.exe(MSIL 反汇编程序)

概念

应用程序域和程序集

应用程序域和程序集帮助主题