Ilasm.exe (IL-Assembler)Ilasm.exe (IL Assembler)

Der IL-Assembler generiert eine portierbare ausführbare Datei (Portable Executable, PE) aus der Zwischensprache (Intermediate Language, IL).The IL Assembler generates a portable executable (PE) file from intermediate language (IL). Weitere Informationen über die Zwischensprache finden Sie unter Der verwaltete Ausführungsprozess. Die erstellte ausführbare Datei, die IL und die erforderlichen Metadaten enthält, können Sie ausführen, um zu überprüfen, ob die IL wie erwartet funktioniert.(For more information on IL, see Managed Execution Process.) You can run the resulting executable, which contains IL and the required metadata, to determine whether the IL performs as expected.

Dieses Tool wird automatisch mit Visual Studio installiert.This tool is automatically installed with Visual Studio. Verwenden Sie die Developer-Eingabeaufforderung für Visual Studio (oder die Visual Studio-Eingabeaufforderung in Windows 7), um das Tool auszuführen.To run the tool, use the Developer Command Prompt for Visual Studio (or the Visual Studio Command Prompt in Windows 7). Weitere Informationen finden Sie unter Eingabeaufforderungen.For more information, see Command Prompts.

Geben Sie an der Eingabeaufforderung Folgendes ein:At the command prompt, type the following:

SyntaxSyntax

ilasm [options] filename [[options]filename...]

ParameterParameters

ArgumentArgument BESCHREIBUNGDescription
filename Der Name der IL-Quelldatei.The name of the .il source file. Diese Datei besteht aus Direktiven für die Deklaration von Metadaten und symbolischen IL-Anweisungen.This file consists of metadata declaration directives and symbolic IL instructions. Zum Erstellen einer einzelnen PE-Datei mithilfe von Ilasm.exe können mehrere Quelldateiargumente angegeben werden.Multiple source file arguments can be supplied to produce a single PE file with Ilasm.exe. Hinweis: Vergewissern Sie sich, dass die letzte Codezeile in der IL-Quelldatei entweder ein nachgestelltes Leerzeichen oder ein Zeilenendezeichen besitzt.Note: Ensure that the last line of code in the .il source file has either trailing white space or an end-of-line character.
OptionOption BESCHREIBUNGDescription
/32bitpreferred/32bitpreferred Erstellt ein Abbild im PE32-Format (vorzugweise 32 Bit).Creates a 32-bit-preferred image (PE32).
/alignment: integer/alignment: integer Legt FileAlignment auf den Wert fest, der im NT Optional-Header per integer angegeben ist.Sets FileAlignment to the value specified by integer in the NT Optional header. Wenn die .alignment-IL-Direktive in der Datei angegeben ist, wird sie durch diese Option überschrieben.If the .alignment IL directive is specified in the file, this option overrides it.
/appcontainer/appcontainer Erstellt als Ausgabe eine DLL- oder EXE-Datei, die im Windows-App-Container ausgeführt wird.Produces a .dll or .exe file that runs in the Windows app container, as output.
/arm/arm Gibt die ARM (Advanced RISC Machine) als Zielprozessor an.Specifies the Advanced RISC Machine (ARM) as the target processor.

Wenn keine Bitanzahl für das Abbild angegeben wird, lautet der Standardwert /32bitpreferred.If no image bitness is specified, the default is /32bitpreferred.
/base: integer/base: integer Legt ImageBase auf den Wert fest, der im NT Optional-Header per integer angegeben ist.Sets ImageBase to the value specified by integer in the NT Optional header. Wenn die .imagebase-IL-Direktive in der Datei angegeben ist, wird sie durch diese Option überschrieben.If the .imagebase IL directive is specified in the file, this option overrides it.
/clock/clock Erfasst und berichtet die folgenden Kompilierungszeiten (in Millisekunden) für die angegebene IL-Quelldatei:Measures and reports the following compilation times in milliseconds for the specified .il source file:

Total Run: Die gesamte für die Ausführung aller nachfolgenden spezifischen Vorgänge benötigte Zeit.Total Run: The total time spent performing all the specific operations that follow.

Startup: Laden und Öffnen der Datei.Startup: Loading and opening the file.

Emitting MD: Ausgabe von Metadaten.Emitting MD: Emitting metadata.

Ref to Def Resolution: Auflösen von Verweisen auf Definitionen in der Datei.Ref to Def Resolution: Resolving references to definitions in the file.

CEE File Generation: Generieren des Dateiimages im Arbeitsspeicher.CEE File Generation: Generating the file image in memory.

PE File Writing: Schreiben des Images in eine PE-Datei.PE File Writing: Writing the image to a PE file.
/debug[:IMPL|OPT]/debug[:IMPL|OPT] Schließt Debuginformationen (Namen lokaler Variablen und Argumente sowie Zeilennummern) ein.Includes debug information (local variable and argument names, and line numbers). Erstellt eine PDB-Datei.Creates a PDB file.

/debug ohne zusätzlichen Wert deaktiviert die JIT-Optimierung und verwendet Sequenzpunkte aus der PDB-Datei./debug with no additional value disables JIT optimization and uses sequence points from the PDB file.

IMPL deaktiviert die JIT-Optimierung und verwendet implizite Sequenzpunkte.IMPL disables JIT optimization and uses implicit sequence points.

OPT aktiviert die JIT-Optimierung und verwendet implizite Sequenzpunkte.OPT enables JIT optimization and uses implicit sequence points.
/dll/dll Erzeugt eine DLL-Datei als Ausgabe.Produces a .dll file as output.
/enc: file/enc: file Erstellt Edit-and-Continue-Deltas aus der angegebenen Quelldatei.Creates Edit-and-Continue deltas from the specified source file.

Die Verwendung dieses Arguments ist nur zu akademischen Zwecken vorgesehen. Ein Einsatz zu kommerziellen Zwecken wird nicht unterstützt.This argument is for academic use only and is not supported for commercial use.
/exe/exe Erstellt eine ausführbare Datei als Ausgabe.Produces an executable file as output. Dies ist die Standardeinstellung.This is the default.
/flags: integer/flags: integer Legt ImageFlags“ auf den Wert, der im Common Language Runtime-Header durch integer angegeben wird.Sets ImageFlags to the value specified by integer in the common language runtime header. Wenn die .corflags-IL-Direktive in der Datei angegeben ist, wird sie durch diese Option überschrieben.If the .corflags IL directive is specified in the file, this option overrides it. Eine Liste der für integergültigen Werte finden Sie unter "CorHdr.h, COMIMAGE_FLAGS".See CorHdr.h, COMIMAGE_FLAGS for a list of valid values for integer.
/fold/fold Fasst identische Methodentexte in einem Text zusammen.Folds identical method bodies into one.
/highentropyva/highentropyva Erstellt eine ausführbare Ausgabedatei, die ASLR mit hoher Entropie (Address Space Layout Randomization, Zufällige Anordnung des Layouts des Adressraums) unterstützt.Produces an output executable that supports high-entropy address space layout randomization (ASLR). (Standardeinstellung für /appcontainer.)(Default for /appcontainer.)
/include: includePath/include: includePath Legt einen Suchpfad für in #includeaufgeführte Dateien fest.Sets a path to search for files included with #include.
/itanium/itanium Gibt Intel Itanium als Zielprozessor an.Specifies Intel Itanium as the target processor.

Wenn keine Bitanzahl für das Abbild angegeben wird, lautet der Standardwert /pe64.If no image bitness is specified, the default is /pe64.
/key: keyFile/key: keyFile Kompiliert filename mit einer starken Signatur unter Verwendung des privaten Schlüssels in keyFile.Compiles filename with a strong signature using the private key contained in keyFile.
/key: @keySource/key: @keySource Kompiliert filename mit einer starken Signatur unter Verwendung des bei keySource erstellten privaten Schlüssels.Compiles filename with a strong signature using the private key produced at keySource.
/listing/listing Erstellt eine Listingdatei in der Standardausgabe.Produces a listing file on the standard output. Wenn Sie diese Option weglassen, wird keine Listingdatei erstellt.If you omit this option, no listing file is produced.

In .NET Framework 2.0 (oder höher) wird dieser Parameter nicht unterstützt.This parameter is not supported in the .NET Framework 2.0 or later.
/mdv: versionString/mdv: versionString Legt die Zeichenfolge der Metadatenversion fest.Sets the metadata version string.
/msv: major.minor/msv: major.minor Legt die Version des Metadatenstreams fest, wobei major und minor ganze Zahlen sind.Sets the metadata stream version, where major and minor are integers.
/noautoinherit/noautoinherit Deaktiviert die Standardvererbung von Object , wenn keine Basisklasse angegeben ist.Disables default inheritance from Object when no base class is specified.
/nocorstub/nocorstub Unterdrückt die Generierung des CORExeMain-Stubs.Suppresses generation of the CORExeMain stub.
/nologo/nologo Unterdrückt die Anzeige des Startbanners von Microsoft.Suppresses the Microsoft startup banner display.
/output: file.ext/output: file.ext Gibt den Namen und die Erweiterung der Ausgabedatei an.Specifies the output file name and extension. In der Standardeinstellung ist der Name der Ausgabedatei mit dem der ersten Quelldatei identisch.By default, the output file name is the same as the name of the first source file. Die Standarderweiterung ist .exe.The default extension is .exe. Wenn Sie die Option /dll angeben, lautet die Standarderweiterung .dll.If you specify the /dll option, the default extension is .dll. Hinweis: Durch Angabe von „ /output:myfile.dll“ wird die Option /dll nicht festgelegt.Note: Specifying /output:myfile.dll does not set the /dll option. Wenn Sie /dll nicht angeben, wird eine ausführbare Datei mit dem Namen myfile.dll erstellt.If you do not specify /dll, the result will be an executable file named myfile.dll.
/optimize/optimize Optimiert lange Anweisungen in kurze Anweisungen.Optimizes long instructions to short. Beispiel: br wird zu br.s.For example, br to br.s.
/pe64/pe64 Erstellt ein 64-Bit-Abbild (PE32+).Creates a 64-bit image (PE32+).

Wenn kein Zielprozessor angegeben wird, lautet der Standardwert /itanium.If no target processor is specified, the default is /itanium.
/pdb/pdb Erstellt eine PDB-Datei, ohne das Nachverfolgen von Debuginformationen zu aktivieren.Creates a PDB file without enabling debug information tracking.
/quiet/quiet Gibt den stillen Modus an, bei dem keine Angaben zum Verlauf der Assembly gemeldet werden.Specifies quiet mode; does not report assembly progress.
/resource: file.res/resource: file.res Bezieht die angegebene Ressourcendatei im Format „*.res“ in die resultierende EXE- oder DLL-Datei ein.Includes the specified resource file in *.res format in the resulting .exe or .dll file. Mit der Option /resource kann nur eine einzige RES-Datei angegeben werden.Only one .res file can be specified with the /resource option.
/ssver: int.int/ssver: int.int Legt die Subsystemversionsnummer im NT Optional-Header fest.Sets the subsystem version number in the NT optional header. Für /appcontainer und /arm lautet die minimale Versionsnummer 6.02.For /appcontainer and /arm the minimum version number is 6.02.
/stack: stackSize/stack: stackSize Legt den SizeOfStackReserve-Wert im NT Optional-Header auf stackSizefest.Sets the SizeOfStackReserve value in the NT Optional header to stackSize.
/stripreloc/stripreloc Gibt an, dass Basisumsetzungen nicht erforderlich sind.Specifies that no base relocations are needed.
/subsystem: integer/subsystem: integer Legt „subsystem“ auf den Wert fest, der im NT Optional-Header durch integer angegeben wird.Sets subsystem to the value specified by integer in the NT Optional header. Wenn die .subsystem-IL-Direktive in der Datei angegeben ist, wird sie durch diesen Befehl überschrieben.If the .subsystem IL directive is specified in the file, this command overrides it. Eine Liste der gültigen Werte für integer finden Sie unter „winnt.h, IMAGE_SUBSYSTEM“.See winnt.h, IMAGE_SUBSYSTEM for a list of valid values for integer.
/x64/x64 Gibt einen 64-Bit-AMD-Prozessor als Zielprozessor an.Specifies a 64-bit AMD processor as the target processor.

Wenn keine Bitanzahl für das Abbild angegeben wird, lautet der Standardwert /pe64.If no image bitness is specified, the default is /pe64.
/?/? Zeigt Befehlssyntax und Optionen für das Tool an.Displays command syntax and options for the tool.

Hinweis

Bei allen Optionen für Ilasm.exe wird nicht zwischen Groß- und Kleinschreibung unterschieden, und sie werden anhand der ersten drei Buchstaben erkannt.All options for Ilasm.exe are case-insensitive and recognized by the first three letters. So ist zum Beispiel /lis das Gleiche wie /listing, und /res:myresfile.res entspricht /resource: myresfile.res. Optionen, die Argumente angeben, können entweder einen Doppelpunkt (:) oder ein Gleichheitszeichen (=) als Trennzeichen zwischen der Option und dem Argument enthalten.For example, /lis is equivalent to /listing and /res:myresfile.res is equivalent to /resource:myresfile.res. Options that specify arguments accept either a colon (:) or an equal sign (=) as the separator between the option and the argument. So wären zum Beispiel /output: file.ext und /output= =file.ext identisch.For example, /output:file.ext is equivalent to /output=file.ext.

AnmerkungenRemarks

Der IL-Assembler unterstützt Anbieter von Tools beim Entwerfen und Implementieren von IL-Generatoren.The IL Assembler helps tool vendors design and implement IL generators. Durch die Verwendung von Ilasm.exe können sich Entwickler von Tools und Compilern auf die Generierung von IL und Metadaten konzentrieren, ohne sich um IL-Ausgaben im PE-Dateiformat kümmern zu müssen.Using Ilasm.exe, tool and compiler developers can concentrate on IL and metadata generation without being concerned with emitting IL in the PE file format.

Ähnlich wie andere Laufzeitcompiler (z.B. C# und Visual Basic) erstellt Ilasm.exe keine Objektzwischendateien und benötigt keine Verknüpfungsstufe zum Erstellen einer PE-Datei.Similar to other compilers that target the runtime, such as C# and Visual Basic, Ilasm.exe does not produce intermediate object files and does not require a linking stage to form a PE file.

Der IL-Assembler kann alle vorhandenen Metadaten und IL-Funktionen der Programmiersprachen ausdrücken, die die Laufzeit unterstützen.The IL Assembler can express all the existing metadata and IL features of the programming languages that target the runtime. Dadurch kann verwalteter Code, der in einer dieser Programmiersprachen geschrieben wurde, im IL-Assembler adäquat ausgedrückt und mit Ilasm.exe kompiliert werden.This allows managed code written in any of these programming languages to be adequately expressed in IL Assembler and compiled with Ilasm.exe.

Hinweis

Wenn die letzte Codezeile in der IL-Quelldatei weder ein nachgestelltes Leerzeichen noch ein Zeilenendezeichen besitzt, kann die Kompilierung fehlschlagen.Compilation might fail if the last line of code in the .il source file does not have either trailing white space or an end-of-line character.

Sie können Ilasm.exe zusammen mit dem zugehörigen Tool Ildasm.exe verwenden.You can use Ilasm.exe in conjunction with its companion tool, Ildasm.exe. Ildasm.exe nimmt eine PE-Datei mit IL-Code entgegen und erstellt eine Textdatei, die als Eingabe für Ilasm.exe geeignet ist.Ildasm.exe takes a PE file that contains IL code and creates a text file suitable as input to Ilasm.exe. Dies ist zum Beispiel nützlich, wenn Code in einer Programmiersprache programmiert werde soll, die nicht alle Attribute der Metadaten der Laufzeit unterstützt.This is useful, for example, when compiling code in a programming language that does not support all the runtime metadata attributes. Nachdem der Code kompiliert und die Ausgabe über Ildasm.exe verarbeitet wurde, kann die resultierende IL-Textdatei manuell bearbeitet werden, um die fehlenden Attribute hinzuzufügen.After compiling the code and running the output through Ildasm.exe, the resulting IL text file can be hand-edited to add the missing attributes. Anschließend können Sie diese Textdatei per Ilasm.exe verarbeiten, um eine endgültige ausführbare Datei zu erstellen.You can then run this text file through the Ilasm.exe to produce a final executable file.

Mit diesem Verfahren können Sie auch eine einzelne PE-Datei aus mehreren PE-Dateien erstellen, die von unterschiedlichen Compilern generiert wurden.You can also use this technique to produce a single PE file from several PE files originally generated by different compilers.

Hinweis

Für PE-Dateien, die eingebetteten systemeigenen Code enthalten (z. B. von Visual C++ erstellte PE-Dateien), ist dieses Verfahren gegenwärtig jedoch nicht geeignet.Currently, you cannot use this technique with PE files that contain embedded native code (for example, PE files produced by Visual C++).

Damit dieses Zusammenspiel von Ildasm.exe und Ilasm.exe so exakt wie möglich erfolgt, ersetzt der Assembler lange Codierungen (die Sie möglicherweise in Ihren IL-Quellen geschrieben haben oder die aus einem anderen Compiler ausgegeben wurden) standardmäßig nicht durch kurze Codierungen.To make this combined use of Ildasm.exe and Ilasm.exe as accurate as possible, by default the assembler does not substitute short encodings for long ones you might have written in your IL sources (or that might be emitted by another compiler). Verwenden Sie die Option /optimize , um kurze Codierungen nach Möglichkeit zu ersetzen.Use the /optimize option to substitute short encodings wherever possible.

Hinweis

Ildasm.exe kann nur für Dateien auf der Festplatte verwendet werden.Ildasm.exe only operates on files on disk. Bei Dateien, die im globalen Assemblycache installiert sind, funktioniert dieses Tool nicht.It does not operate on files installed in the global assembly cache.

Weitere Informationen zur Grammatik von IL finden Sie in der Datei „asmparse.grammar“ im Windows SDK.For more information about the grammar of IL, see the asmparse.grammar file in the Windows SDK.

VersionsinformationenVersion Information

Ab .NET Framework 4.5 können Sie ein benutzerdefiniertes Attribut an eine Schnittstellenimplementierung anfügen, indem Sie Code verwenden, der in etwa wie folgt aussieht:Starting with the .NET Framework 4.5, you can attach a custom attribute to an interface implementation by using code similar to the following:

.class interface public abstract auto ansi IMyInterface
{
  .method public hidebysig newslot abstract virtual
    instance int32 method1() cil managed
  {
  } // end of method IMyInterface::method1
} // end of class IMyInterface
.class public auto ansi beforefieldinit MyClass
  extends [mscorlib]System.Object
  implements IMyInterface
  {
    .interfaceimpl type IMyInterface
    .custom instance void
      [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 )
      …

Ab .NET Framework 4.5 können Sie ein beliebiges Marshall-BLOB (Binary Large Object) angeben, indem Sie die entsprechenden unformatierten Binärdaten wie im folgenden Code gezeigt angeben:Starting with the .NET Framework 4.5, you can specify an arbitrary marshal BLOB (binary large object) by using its raw binary representation, as shown in the following code:

.method public hidebysig abstract virtual
        instance void
        marshal({ 38 01 02 FF })
        Test(object A_1) cil managed

Weitere Informationen zur Grammatik von IL finden Sie in der Datei „asmparse.grammar“ im Windows SDK.For more information about the grammar of IL, see the asmparse.grammar file in the Windows SDK.

BeispieleExamples

Der folgende Befehl assembliert die IL-Datei myTestFile.il und erstellt die ausführbare Datei myTestFile.exe.The following command assembles the IL file myTestFile.il and produces the executable myTestFile.exe.

ilasm myTestFile

Der folgende Befehl assembliert die IL-Datei myTestFile.il und erstellt die DLL-Datei myTestFile.dll.The following command assembles the IL file myTestFile.il and produces the .dll file myTestFile.dll.

ilasm myTestFile /dll

Der folgende Befehl assembliert die IL-Datei myTestFile.il und erstellt die DLL-Datei myNewTestFile.dll.The following command assembles the IL file myTestFile.il and produces the .dll file myNewTestFile.dll.

ilasm myTestFile /dll /output:myNewTestFile.dll

Im folgenden Codebeispiel wird eine sehr einfache Anwendung gezeigt, die "Hello World!"The following code example shows an extremely simple application that displays "Hello World!" auf der Konsole aus.to the console. Sie können diesen Code kompilieren und dann das Tool Ildasm.exe verwenden, um eine IL-Datei zu generieren.You can compile this code and then use the Ildasm.exe tool to generate an IL file.

using System;

public class Hello
{
    public static void Main(String[] args)
    {
        Console.WriteLine("Hello World!");
    }
}

Das folgende IL-Codebeispiel entspricht dem vorherigen C#-Codebeispiel.The following IL code example corresponds to the previous C# code example. Sie können diesen Code mithilfe des IL Assembler-Tools in eine Assembly kompilieren.You can compile this code into an assembly using the IL Assembler tool. Sowohl der IL- als auch der C#-Beispielcode geben "Hello World!"Both IL and C# code examples display "Hello World!" auf der Konsole aus.to the console.

// Metadata version: v2.0.50215
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 2:0:0:0
}
.assembly sample
{
  .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}
.module sample.exe
// MVID: {A224F460-A049-4A03-9E71-80A36DBBBCD3}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003       // WINDOWS_CUI
.corflags 0x00000001    //  ILONLY
// Image base: 0x02F20000

// =============== CLASS MEMBERS DECLARATION ===================

.class public auto ansi beforefieldinit Hello
       extends [mscorlib]System.Object
{
  .method public hidebysig static void  Main(string[] args) cil managed
  {
    .entrypoint
    // Code size       13 (0xd)
    .maxstack  8
    IL_0000:  nop
    IL_0001:  ldstr      "Hello World!"
    IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_000b:  nop
    IL_000c:  ret
  } // end of method Hello::Main

  .method public hidebysig specialname rtspecialname
          instance void  .ctor() cil managed
  {
    // Code size       7 (0x7)
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
    IL_0006:  ret
  } // end of method Hello::.ctor

} // end of class Hello

Siehe auchSee also