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

L'assembler IL genera un file eseguibile di tipo PE dal linguaggio intermedio (IL).The IL Assembler generates a portable executable (PE) file from intermediate language (IL). Per altre informazioni su IL, vedere Processo di esecuzione gestita. È possibile eseguire il file eseguibile così ottenuto, contenente il codice IL e i metadati necessari, per determinare se il codice IL viene eseguito come previsto.(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.

Viene installato automaticamente con Visual Studio.This tool is automatically installed with Visual Studio. Per eseguire lo strumento, usare il prompt dei comandi per sviluppatori o il prompt dei comandi di Visual Studio in Windows 7.To run the tool, use the Developer Command Prompt (or the Visual Studio Command Prompt in Windows 7). Per altre informazioni, vedere Prompt dei comandi.For more information, see Command Prompts.

Al prompt dei comandi digitare quanto segue:At the command prompt, type the following:

SintassiSyntax

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

ParametriParameters

ArgomentoArgument DescrizioneDescription
filename Nome del file di origine .il.The name of the .il source file. Questo file è formato da direttive di dichiarazione di metadati e istruzioni IL simboliche.This file consists of metadata declaration directives and symbolic IL instructions. È possibile fornire più argomenti di file di origine per produrre un unico file PE con Ilasm.exe.Multiple source file arguments can be supplied to produce a single PE file with Ilasm.exe. Nota: verificare che nell'ultima riga di codice del file di origine con estensione il sia presente uno spazio vuoto finale o un carattere di fine riga.Note: Ensure that the last line of code in the .il source file has either trailing white space or an end-of-line character.
OpzioneOption DescrizioneDescription
/32bitpreferred/32bitpreferred Crea un'immagine con preferenza per i 32 bit (PE32).Creates a 32-bit-preferred image (PE32).
/alignment: integer/alignment: integer Imposta FileAlignment sul valore specificato da integer nell'intestazione NT facoltativa.Sets FileAlignment to the value specified by integer in the NT Optional header. Se la direttiva IL .alignment è specificata nel file, questa opzione ne esegue l'override.If the .alignment IL directive is specified in the file, this option overrides it.
/appcontainer/appcontainer Genera un file .dll o .exe che viene eseguito nel contenitore delle app Windows, come output.Produces a .dll or .exe file that runs in the Windows app container, as output.
/arm/arm Specifica Advanced RISC Machine (ARM) come processore di destinazione.Specifies the Advanced RISC Machine (ARM) as the target processor.

Se non viene specificato il numero di bit dell'immagine, viene utilizzata l'impostazione predefinita /32bitpreferred.If no image bitness is specified, the default is /32bitpreferred.
/base: integer/base: integer Imposta ImageBase sul valore specificato da integer nell'intestazione NT facoltativa.Sets ImageBase to the value specified by integer in the NT Optional header. Se la direttiva IL .imagebase è specificata nel file, questa opzione ne esegue l'override.If the .imagebase IL directive is specified in the file, this option overrides it.
/clock/clock Misura e segnala i seguenti tempi di compilazione in millisecondi per il file di origine .il specificato:Measures and reports the following compilation times in milliseconds for the specified .il source file:

Total Run: tempo totale impiegato per l'esecuzione di tutte le operazioni specifiche che seguono.Total Run: The total time spent performing all the specific operations that follow.

Startup: caricamento e apertura del file.Startup: Loading and opening the file.

Emitting MD: emissione di metadati.Emitting MD: Emitting metadata.

Ref to Def Resolution: risoluzione dei riferimenti nelle definizioni nel file.Ref to Def Resolution: Resolving references to definitions in the file.

CEE File Generation: generazione dell'immagine del file in memoria.CEE File Generation: Generating the file image in memory.

PE File Writing: scrittura dell'immagine in un file PE.PE File Writing: Writing the image to a PE file.
/debug[:IMPL|OPT]/debug[:IMPL|OPT] Include informazioni di debug (nomi di variabili locali e di argomenti e numeri di riga).Includes debug information (local variable and argument names, and line numbers). Crea un file PDB.Creates a PDB file.

Se si specifica /debug senza altri valori, viene disabilitata l'ottimizzazione JIT e vengono utilizzati i punti di sequenza dal file PDB./debug with no additional value disables JIT optimization and uses sequence points from the PDB file.

IMPL disabilita l'ottimizzazione JIT e utilizza punti di sequenza impliciti.IMPL disables JIT optimization and uses implicit sequence points.

OPT abilita l'ottimizzazione JIT e utilizza punti di sequenza impliciti.OPT enables JIT optimization and uses implicit sequence points.
/dll/dll Produce un file .dll come output.Produces a .dll file as output.
/enc: file/enc: file Crea file differenziali di Modifica e continuazione a partire dal file di origine specificato.Creates Edit-and-Continue deltas from the specified source file.

Questo argomento è esclusivamente per utilizzo didattico e non è supportato per un utilizzo commerciale.This argument is for academic use only and is not supported for commercial use.
/exe/exe Produce un file eseguibile come output.Produces an executable file as output. Questa è l'impostazione predefinita.This is the default.
/flags: integer/flags: integer Imposta ImageFlags sul valore specificato da integer nell'intestazione Common Language Runtime.Sets ImageFlags to the value specified by integer in the common language runtime header. Se la direttiva IL .corflags è specificata nel file, questa opzione ne esegue l'override.If the .corflags IL directive is specified in the file, this option overrides it. Per un elenco di valori validi per integer, vedere CorHdr.h, COMIMAGE_FLAGS.See CorHdr.h, COMIMAGE_FLAGS for a list of valid values for integer.
/fold/fold Raggruppa corpi di metodo identici in uno solo.Folds identical method bodies into one.
/highentropyva/highentropyva Genera in output un file eseguibile che supporta ASLR (Address Space Layout Randomization) a entropia elevata.Produces an output executable that supports high-entropy address space layout randomization (ASLR). Impostazione predefinita per /appcontainer.(Default for /appcontainer.)
/include: includePath/include: includePath Imposta un percorso per la ricerca di file inclusi con #include.Sets a path to search for files included with #include.
/itanium/itanium Specifica Intel Itanium come processore di destinazione.Specifies Intel Itanium as the target processor.

Se non viene specificato il numero di bit dell'immagine, viene utilizzata l'impostazione predefinita /pe64.If no image bitness is specified, the default is /pe64.
/key: keyFile/key: keyFile Compila filename con una firma sicura usando la chiave privata contenuta in keyFile.Compiles filename with a strong signature using the private key contained in keyFile.
/key: @keySource/key: @keySource Compila filename con una firma sicura usando la chiave privata prodotta in keySource.Compiles filename with a strong signature using the private key produced at keySource.
/listing/listing Produce un file di elenco sull'output standard.Produces a listing file on the standard output. Se si omette questa opzione, non verrà prodotto alcun file di elenco.If you omit this option, no listing file is produced.

Questo parametro non è supportato in .NET Framework 2.0 o versione successiva.This parameter is not supported in the .NET Framework 2.0 or later.
/mdv: versionString/mdv: versionString Imposta la stringa di versione dei metadati.Sets the metadata version string.
/msv: major.minor/msv: major.minor Imposta la versione del flusso di metadati, dove major e minor sono numeri interi.Sets the metadata stream version, where major and minor are integers.
/noautoinherit/noautoinherit Disabilita l'ereditarietà predefinita da Object quando non è specificata alcuna classe base.Disables default inheritance from Object when no base class is specified.
/nocorstub/nocorstub Elimina la generazione dello stub CORExeMain.Suppresses generation of the CORExeMain stub.
/nologo/nologo Evita la visualizzazione del messaggio di avvio Microsoft.Suppresses the Microsoft startup banner display.
/output: file.ext/output: file.ext Specifica il nome e l'estensione del file di output.Specifies the output file name and extension. Per impostazione predefinita, il nome del file di output corrisponde al nome del primo file di origine.By default, the output file name is the same as the name of the first source file. L'estensione predefinita è .exe.The default extension is .exe. Se si specifica l'opzione /dll, l'estensione predefinita sarà .dll.If you specify the /dll option, the default extension is .dll. Nota: se si specifica /output:myfile.dll, non verrà impostata l'opzione /dll.Note: Specifying /output:myfile.dll does not set the /dll option. Se non si specifica /dll, si otterrà un file eseguibile denominato myfile.dll.If you do not specify /dll, the result will be an executable file named myfile.dll.
/optimize/optimize Ottimizza le istruzioni long convertendole in short.Optimizes long instructions to short. Ad esempio, br viene convertito in br.s.For example, br to br.s.
/pe64/pe64 Crea un'immagine a 64 bit (PE32+).Creates a 64-bit image (PE32+).

Se non è specificato il processore di destinazione, l'impostazione predefinita è /itanium.If no target processor is specified, the default is /itanium.
/pdb/pdb Crea un file PDB senza abilitare la traccia delle informazioni di debug.Creates a PDB file without enabling debug information tracking.
/quiet/quiet Specifica la modalità non interattiva. Non visualizza informazioni sullo stato dell'assembly.Specifies quiet mode; does not report assembly progress.
/resource: file.res/resource: file.res Include il file di risorse, specificato in formato *.res, nel file con estensione exe o dll risultante.Includes the specified resource file in *.res format in the resulting .exe or .dll file. È possibile specificare un unico file .res con l'opzione /resource .Only one .res file can be specified with the /resource option.
/ssver: int.int/ssver: int.int Imposta il numero di versione del sottosistema nell'intestazione NT facoltativa.Sets the subsystem version number in the NT optional header. Per /appcontainer e /arm il numero minimo di versione è 6.02.For /appcontainer and /arm the minimum version number is 6.02.
/stack: stackSize/stack: stackSize Imposta su stackSizeil valore di SizeOfStackReserve nell'intestazione NT facoltativa.Sets the SizeOfStackReserve value in the NT Optional header to stackSize.
/stripreloc/stripreloc Specifica che non sono necessarie rilocazioni di base.Specifies that no base relocations are needed.
/subsystem: integer/subsystem: integer Imposta il sottosistema sul valore specificato da integer nell'intestazione NT facoltativa.Sets subsystem to the value specified by integer in the NT Optional header. Se la direttiva IL .subsystem è specificata nel file, questo comando ne esegue l'override.If the .subsystem IL directive is specified in the file, this command overrides it. Per un elenco di valori validi per integer, vedere winnt.h, IMAGE_SUBSYSTEM.See winnt.h, IMAGE_SUBSYSTEM for a list of valid values for integer.
/x64/x64 Specifica un processore AMD a 64 bit come processore di destinazione.Specifies a 64-bit AMD processor as the target processor.

Se non viene specificato il numero di bit dell'immagine, viene utilizzata l'impostazione predefinita /pe64.If no image bitness is specified, the default is /pe64.
/?/? Visualizza la sintassi e le opzioni di comando dello strumento.Displays command syntax and options for the tool.

Nota

Tutte le opzioni di Ilasm.exe non sono soggette alla distinzione tra maiuscole e minuscole e vengono riconosciute dalle prime tre lettere.All options for Ilasm.exe are case-insensitive and recognized by the first three letters. Ad esempio, /lis equivale a /listing e /res:myresfile.res equivale a /resource:myresfile.res. Le opzioni che specificano argomenti accettano i due punti (:) o un segno di uguale (=) come separatore tra l'opzione e l'argomento.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. /output:file.ext, ad esempio, equivale a /output=file.ext.For example, /output:file.ext is equivalent to /output=file.ext.

NoteRemarks

L'assembler IL consente ai fornitori di strumenti di progettare e implementare generatori IL.The IL Assembler helps tool vendors design and implement IL generators. Grazie a Ilasm.exe, gli sviluppatori di strumenti e compilatori possono concentrarsi su IL e sulla generazione di metadati senza doversi preoccupare di emettere IL nel formato di file di tipo PE.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.

Analogamente ad altri compilatori destinati al runtime, quali C# e Visual Basic, Ilasm.exe non produce file oggetto intermedi e non richiede alcuna fase di collegamento per creare un file di tipo PE.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.

L'assembler IL è in grado di esprimere tutte le funzionalità esistenti per IL e i metadati dei linguaggi di programmazione destinati al runtime.The IL Assembler can express all the existing metadata and IL features of the programming languages that target the runtime. In questo modo il codice gestito scritto in uno qualsiasi di questi linguaggi di programmazione può essere espresso nell'assembler IL e compilato con Ilasm.exe in modo appropriato.This allows managed code written in any of these programming languages to be adequately expressed in IL Assembler and compiled with Ilasm.exe.

Nota

È possibile che la compilazione abbia esito negativo se nell'ultima riga di codice del file di origine con estensione il non è presente uno spazio vuoto finale o un carattere di fine riga.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.

È possibile utilizzare Ilasm.exe unitamente allo strumento complementare Ildasm.exe.You can use Ilasm.exe in conjunction with its companion tool, Ildasm.exe. Ildasm.exe accetta un file di tipo PE contenente codice IL e crea un file di testo adatto come input per Ilasm.exe.Ildasm.exe takes a PE file that contains IL code and creates a text file suitable as input to Ilasm.exe. Questo è utile, ad esempio, quando si compila codice in un linguaggio di programmazione che non supporta tutti gli attributi dei metadati del runtime.This is useful, for example, when compiling code in a programming language that does not support all the runtime metadata attributes. Dopo aver compilato il codice ed eseguito l'output tramite Ildasm.exe, il file di testo IL ottenuto potrà essere modificato manualmente per aggiungere gli attributi mancanti.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. Sarà quindi possibile elaborare questo file di testo mediante Ilasm.exe per produrre un file eseguibile finale.You can then run this text file through the Ilasm.exe to produce a final executable file.

È inoltre possibile ricorrere a questa tecnica per produrre un unico file PE sulla base di più file PE generati da diversi compilatori.You can also use this technique to produce a single PE file from several PE files originally generated by different compilers.

Nota

Attualmente non è possibile avvalersi di questa tecnica con file PE contenenti codice nativo incorporato, ad esempio file PE prodotti da Visual C++.Currently, you cannot use this technique with PE files that contain embedded native code (for example, PE files produced by Visual C++).

Per fare in modo che l'utilizzo combinato di Ildasm.exe e Ilasm.exe risulti il più accurato possibile, per impostazione predefinita l'assembler non sostituisce le codifiche short con quelle long che potrebbero essere state scritte nelle origini IL (o che potrebbero essere state emesse da un altro compilatore).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). Utilizzare l'opzione /optimize per sostituire le codifiche short quando possibile.Use the /optimize option to substitute short encodings wherever possible.

Nota

Ildasm.exe opera solo su file su disco.Ildasm.exe only operates on files on disk. e non su file installati nella Global Assembly Cache.It does not operate on files installed in the global assembly cache.

Per ulteriori informazioni sulla grammatica di IL, vedere il file asmparse.grammar in Windows Software Development Kit (SDK)Windows Software Development Kit (SDK).For more information about the grammar of IL, see the asmparse.grammar file in the Windows Software Development Kit (SDK)Windows Software Development Kit (SDK).

Informazioni sulla versioneVersion Information

A partire da .NET Framework 4.5.NET Framework 4.5, è possibile associare un attributo personalizzato a un'implementazione di interfaccia utilizzando codice analogo al seguente:Starting with the .NET Framework 4.5.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 )
      …

A partire da .NET Framework 4.5.NET Framework 4.5, è possibile specificare un marshalling BLOB (oggetto binario di grandi dimensioni) arbitrario utilizzando la relativa rappresentazione binaria non elaborata, come illustrato nel codice seguente:Starting with the .NET Framework 4.5.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

Per ulteriori informazioni sulla grammatica di IL, vedere il file asmparse.grammar in Windows Software Development Kit (SDK)Windows Software Development Kit (SDK).For more information about the grammar of IL, see the asmparse.grammar file in the Windows Software Development Kit (SDK)Windows Software Development Kit (SDK).

EsempiExamples

Il comando che segue assembla il file IL myTestFile.il e produce l'eseguibile myTestFile.exe.The following command assembles the IL file myTestFile.il and produces the executable myTestFile.exe.

ilasm myTestFile

Il comando che segue assembla il file IL myTestFile.il e produce il file .dll myTestFile.dll.The following command assembles the IL file myTestFile.il and produces the .dll file myTestFile.dll.

ilasm myTestFile /dll

Il comando che segue assembla il file IL myTestFile.il e produce il file .dll myNewTestFile.dll.The following command assembles the IL file myTestFile.il and produces the .dll file myNewTestFile.dll.

ilasm myTestFile /dll /output:myNewTestFile.dll

L'esempio di codice seguente illustra un'applicazione molto semplice che visualizza "Hello World!"The following code example shows an extremely simple application that displays "Hello World!" nella console.to the console. È possibile compilare questo codice e quindi utilizzare lo strumento Ildasm.exe per generare un file IL.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!");
    }
}

L'esempio di codice IL riportato di seguito corrisponde al precedente esempio di codice C#.The following IL code example corresponds to the previous C# code example. È possibile compilare questo codice in un assembly mediante lo strumento IL Assembler.You can compile this code into an assembly using the IL Assembler tool. Gli esempi di codice IL e C# visualizzano entrambi "Hello World!"Both IL and C# code examples display "Hello World!" nella console.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

Vedere ancheSee also

StrumentiTools
Ildasm.exe (Disassembler IL)Ildasm.exe (IL Disassembler)
Processo di esecuzione gestitaManaged Execution Process
Prompt dei comandiCommand Prompts