Dela via


Anvisningar: Visa sammansättningsinnehåll

Du kan använda Ildasm.exe (IL Disassembler) för att visa gemensam information om mellanliggande språk (CIL) i en fil. Om filen som undersöks är en sammansättning kan den här informationen innehålla sammansättningens attribut och referenser till andra moduler och sammansättningar. Den här informationen kan vara användbar för att avgöra om en fil är en sammansättning eller en del av en sammansättning och om filen har referenser till andra moduler eller sammansättningar.

Om du vill visa innehållet i en sammansättning med hjälp av Ildasm.exe anger du ildasm-sammansättningsnamnet <> i en kommandotolk. Följande kommando demonterar till exempel Hello.exe sammansättning.

ildasm Hello.exe

Om du vill visa information om sammansättningsmanifestet dubbelklickar du på manifestikonen i IL Disassembler-fönstret.

Exempel

Följande exempel börjar med ett grundläggande "Hello World"-program. När du har kompilerats med programmet använder du Ildasm.exe för att demontera Hello.exe sammansättning och visa sammansättningsmanifestet.

using namespace System;

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

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

class MainApp
{
    public static void Main()
    {
        Console.WriteLine("Hello World using C#!");
    }
}
Class MainApp
    Public Shared Sub Main()
        Console.WriteLine("Hello World using Visual Basic!")
    End Sub
End Class

Om du kör kommandot ildasm.exe på Hello.exe-sammansättningen och dubbelklickar på manifestikonen i IL Disassembler-fönstret genereras följande utdata:

// 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

I följande tabell beskrivs varje direktiv i sammansättningsmanifestet för den Hello.exe sammansättning som används i exemplet:

Direktiv beskrivning
.assembly extern <assembly name> Anger en annan sammansättning som innehåller objekt som refereras av den aktuella modulen (i det här exemplet mscorlib).
.publickeytoken-token <> Anger token för den faktiska nyckeln för den refererade sammansättningen.
.ver <versionsnummer> Anger versionsnumret för den refererade sammansättningen.
Sammansättningsnamn för .assembly <> Anger sammansättningsnamnet.
.hash-algoritmens <int32-värde> Anger den hash-algoritm som används.
.ver <versionsnummer> Anger versionsnumret för sammansättningen.
.module-filnamn <> Anger namnet på de moduler som utgör sammansättningen. I det här exemplet består sammansättningen av endast en fil.
.subsystem-värde <> Anger den programmiljö som krävs för programmet. I det här exemplet anger värdet 3 att den här körbara filen körs från en konsol.
.corflags För närvarande ett reserverat fält i metadata.

Ett sammansättningsmanifest kan innehålla ett antal olika direktiv, beroende på innehållet i sammansättningen. En omfattande lista över direktiven i sammansättningsmanifestet finns i Ecma-dokumentationen, särskilt "Partition II: Metadata Definition and Semantics" och "Partition III: CIL Instruction Set":

Se även