Ilasm.exe (Ensamblador de IL)Ilasm.exe (IL Assembler)

El Ensamblador de IL genera un archivo portable ejecutable (PE) a partir del lenguaje intermedio (IL).The IL Assembler generates a portable executable (PE) file from intermediate language (IL). Para obtener información sobre IL, consulte Proceso de ejecución administrada. Se puede ejecutar el archivo ejecutable resultante, que contiene IL y los metadatos requeridos, para determinar si IL se comporta de acuerdo con lo esperado.(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.

Esta herramienta se instala automáticamente con Visual Studio.This tool is automatically installed with Visual Studio. Para ejecutar la herramienta, use Símbolo del sistema para desarrolladores de Visual Studio (o Símbolo del sistema de Visual Studio en Windows 7).To run the tool, use the Developer Command Prompt for Visual Studio (or the Visual Studio Command Prompt in Windows 7). Para más información, consulte Símbolos del sistema.For more information, see Command Prompts.

En el símbolo del sistema, escriba lo siguiente:At the command prompt, type the following:

SintaxisSyntax

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

ParámetrosParameters

ArgumentoArgument DescripciónDescription
filename El nombre del archivo de código fuente con extensión .il.The name of the .il source file. Este archivo consta de directivas de declaraciones de metadatos e instrucciones simbólicas de IL.This file consists of metadata declaration directives and symbolic IL instructions. Con Ilasm.exe se pueden proporcionar varios argumentos de archivo de código fuente para producir un único archivo PE.Multiple source file arguments can be supplied to produce a single PE file with Ilasm.exe. Nota: Asegúrese de que la última línea de código del archivo de código fuente .il tiene un espacio en blanco al final o un carácter de fin de línea.Note: Ensure that the last line of code in the .il source file has either trailing white space or an end-of-line character.
OpciónOption DescripciónDescription
/32bitpreferred/32bitpreferred Crea una imagen preferida de 32 bits (PE32).Creates a 32-bit-preferred image (PE32).
/alignment: integer/alignment: integer Establece FileAlignment en el valor especificado por integer en el encabezado NT opcional.Sets FileAlignment to the value specified by integer in the NT Optional header. Si se especifica la directiva IL .alignment en el archivo, esta opción la reemplaza.If the .alignment IL directive is specified in the file, this option overrides it.
/appcontainer/appcontainer Genera un archivo .dll o .exe que se ejecuta en el contenedor de la aplicación de Windows, como salida.Produces a .dll or .exe file that runs in the Windows app container, as output.
/arm/arm Especifica Advanced RISC Machine (ARM) como procesador de destino.Specifies the Advanced RISC Machine (ARM) as the target processor.

Si no se especifican los bits de la imagen, el valor predeterminado es /32bitpreferred.If no image bitness is specified, the default is /32bitpreferred.
/base: integer/base: integer Establece ImageBase en el valor especificado por integer en el encabezado NT opcional.Sets ImageBase to the value specified by integer in the NT Optional header. Si se especifica la directiva IL .imagebase en el archivo, esta opción la reemplaza.If the .imagebase IL directive is specified in the file, this option overrides it.
/clock/clock Mide e informa de los siguientes tiempos de compilación en milisegundos para el archivo de código fuente .il especificado:Measures and reports the following compilation times in milliseconds for the specified .il source file:

Total Run: Tiempo total empleado en la ejecución de todas las operaciones específicas que se muestran a continuación.Total Run: The total time spent performing all the specific operations that follow.

Startup: Carga y apertura del archivo.Startup: Loading and opening the file.

Emitting MD: Emisión de metadatos.Emitting MD: Emitting metadata.

Ref to Def Resolution: Resolución de referencias a definiciones del archivo.Ref to Def Resolution: Resolving references to definitions in the file.

CEE File Generation: Generación de la imagen de archivo en memoria.CEE File Generation: Generating the file image in memory.

PE File Writing: Escritura de la imagen en un archivo PE.PE File Writing: Writing the image to a PE file.
/debug[:IMPL|OPT]/debug[:IMPL|OPT] Incluye información de depuración (nombres de variables locales y argumentos, y números de línea).Includes debug information (local variable and argument names, and line numbers). Crea un archivo PDB.Creates a PDB file.

/debug sin ningún valor adicional deshabilita la optimización JIT y usa puntos de secuencia del archivo PDB./debug with no additional value disables JIT optimization and uses sequence points from the PDB file.

IMPL deshabilita la optimización JIT y usa puntos de secuencia implícitos.IMPL disables JIT optimization and uses implicit sequence points.

OPT habilita la optimización JIT y usa puntos de secuencia implícitos.OPT enables JIT optimization and uses implicit sequence points.
/dll/dll Genera un archivo .dll como archivo de salida.Produces a .dll file as output.
/enc: file/enc: file Crea deltas Editar y continuar a partir del archivo de código fuente especificado.Creates Edit-and-Continue deltas from the specified source file.

Este argumento es solo para uso académico, no se admite el uso comercial del mismo.This argument is for academic use only and is not supported for commercial use.
/exe/exe Genera un archivo ejecutable como archivo de salida.Produces an executable file as output. Este es el valor predeterminado.This is the default.
/flags: integer/flags: integer Establece ImageFlags en el valor especificado por integer en el encabezado de Common Language Runtime.Sets ImageFlags to the value specified by integer in the common language runtime header. Si se especifica la directiva IL .corflags en el archivo, esta opción la reemplaza.If the .corflags IL directive is specified in the file, this option overrides it. Vea CorHdr.h, COMIMAGE_FLAGS para obtener una lista de los valores válidos para integer.See CorHdr.h, COMIMAGE_FLAGS for a list of valid values for integer.
/fold/fold Forma un solo cuerpo a partir de cuerpos de método idénticos.Folds identical method bodies into one.
/highentropyva/highentropyva Genera un archivo ejecutable de salida que admite la selección aleatoria del diseño del espacio de direcciones (ASLR) de alta entropía.Produces an output executable that supports high-entropy address space layout randomization (ASLR). (Es el valor predeterminado de /appcontainer).(Default for /appcontainer.)
/include: includePath/include: includePath Establece una ruta de acceso para buscar los archivos incluidos con #include.Sets a path to search for files included with #include.
/itanium/itanium Especifica Intel Itanium como procesador de destino.Specifies Intel Itanium as the target processor.

Si no se especifican los bits de la imagen, el valor predeterminado es /pe64.If no image bitness is specified, the default is /pe64.
/key: keyFile/key: keyFile Compila filename con una firma segura mediante la clave privada contenida en keyFile.Compiles filename with a strong signature using the private key contained in keyFile.
/key: @keySource/key: @keySource Compila filename con una firma segura mediante la clave privada generada en keySource.Compiles filename with a strong signature using the private key produced at keySource.
/listing/listing Genera un archivo del lista en la salida estándar.Produces a listing file on the standard output. Si se omite esta opción, no se genera ningún archivo de lista.If you omit this option, no listing file is produced.

Este parámetro no es compatible con .NET Framework 2.0 o posterior.This parameter is not supported in the .NET Framework 2.0 or later.
/mdv: versionString/mdv: versionString Establece la cadena de versión de metadatos.Sets the metadata version string.
/msv: major.minor/msv: major.minor Establece la versión del flujo de metadatos, donde major y minor son valores enteros.Sets the metadata stream version, where major and minor are integers.
/noautoinherit/noautoinherit Deshabilita la herencia predeterminada de Object cuando no se especifica ninguna clase base.Disables default inheritance from Object when no base class is specified.
/nocorstub/nocorstub Suprime la generación de código auxiliar de CORExeMain.Suppresses generation of the CORExeMain stub.
/nologo/nologo Suprime la presentación de la portada de inicio de Microsoft.Suppresses the Microsoft startup banner display.
/output: file.ext/output: file.ext Especifica el nombre y la extensión del archivo de salida.Specifies the output file name and extension. De forma predeterminada, el nombre del archivo de salida coincide con el nombre del primer archivo de código fuente.By default, the output file name is the same as the name of the first source file. La extensión predeterminada es .exe.The default extension is .exe. Si se especifica la opción /dll, la extensión predeterminada es .dll.If you specify the /dll option, the default extension is .dll. Nota: La especificación de /output:myfile.dll no establece la opción /dll.Note: Specifying /output:myfile.dll does not set the /dll option. Si no se especifica /dll, el resultado será un archivo ejecutable denominado myfile.dll.If you do not specify /dll, the result will be an executable file named myfile.dll.
/optimize/optimize Optimiza las instrucciones largas en instrucciones cortas.Optimizes long instructions to short. Por ejemplo, br en br.s.For example, br to br.s.
/pe64/pe64 Crea una imagen de 64 bits (PE32+).Creates a 64-bit image (PE32+).

Si no se especifica un procesador de destino, el valor predeterminado es /itanium.If no target processor is specified, the default is /itanium.
/pdb/pdb Crea un archivo PDB sin habilitar un seguimiento de la información de depuración.Creates a PDB file without enabling debug information tracking.
/quiet/quiet Especifica el modo silencioso; no se notifica el progreso del ensamblado.Specifies quiet mode; does not report assembly progress.
/resource: file.res/resource: file.res Incluye el archivo de recursos especificado con formato *.res en el archivo .exe o .dll resultante.Includes the specified resource file in *.res format in the resulting .exe or .dll file. Solo se puede especificar un archivo .res con la opción /resource .Only one .res file can be specified with the /resource option.
/ssver: int.int/ssver: int.int Establece el número de versión del subsistema en el encabezado NT opcional.Sets the subsystem version number in the NT optional header. Para /appcontainer y /arm el número de versión mínimo es 6.02.For /appcontainer and /arm the minimum version number is 6.02.
/stack: stackSize/stack: stackSize Establece el valor de SizeOfStackReserve en el encabezado NT opcional en stackSize.Sets the SizeOfStackReserve value in the NT Optional header to stackSize.
/stripreloc/stripreloc Especifica que no es necesaria ninguna reubicación base.Specifies that no base relocations are needed.
/subsystem: integer/subsystem: integer Establece subsystem en el valor especificado por integer en el encabezado NT opcional.Sets subsystem to the value specified by integer in the NT Optional header. Si se especifica la directiva IL .subsystem en el archivo, este comando la reemplaza.If the .subsystem IL directive is specified in the file, this command overrides it. Vea winnt.h, IMAGE_SUBSYSTEM para obtener una lista de los valores válidos para integer.See winnt.h, IMAGE_SUBSYSTEM for a list of valid values for integer.
/x64/x64 Especifica un procesador AMD de 64 bits como procesador de destino.Specifies a 64-bit AMD processor as the target processor.

Si no se especifican los bits de la imagen, el valor predeterminado es /pe64.If no image bitness is specified, the default is /pe64.
/?/? Muestra las opciones y la sintaxis de los comandos para la herramienta.Displays command syntax and options for the tool.

Nota

Ninguna de las opciones de Ilasm.exe distingue entre mayúsculas y minúsculas, y se reconocen mediante las tres primeras letras.All options for Ilasm.exe are case-insensitive and recognized by the first three letters. Por ejemplo, /lis equivale a /listing y /res:myresfile.res equivale a /resource:myresfile.res. Las opciones que especifican argumentos aceptan un signo de dos puntos (:) o un signo igual (=) como separador entre la opción y el argumento.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. Por ejemplo, /output:file.ext es equivalente a /output=file.ext.For example, /output:file.ext is equivalent to /output=file.ext.

ComentariosRemarks

El Ensamblador de IL ayuda a los proveedores de herramientas a diseñar e implementar generadores IL.The IL Assembler helps tool vendors design and implement IL generators. Mediante el uso de Ilasm.exe, los desarrolladores de herramientas y compiladores se pueden concentrar en la generación de IL y metadatos sin necesidad de preocuparse por la emisión de IL en el formato de archivo 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.

Al igual que otros compiladores orientados al tiempo de ejecución, como C# y Visual Basic, Ilasm.exe no genera archivos objeto intermedios y no requiere una etapa de vinculación para crear un archivo 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.

El Ensamblador de IL puede expresar todos los metadatos existentes y las características de IL que caracterizan a los lenguajes de programación orientados al runtime.The IL Assembler can express all the existing metadata and IL features of the programming languages that target the runtime. Esto permite que el código administrado escrito en cualquiera de estos lenguajes de programación se pueda expresar en el Ensamblador de IL y compilar con Ilasm.exe de forma correcta.This allows managed code written in any of these programming languages to be adequately expressed in IL Assembler and compiled with Ilasm.exe.

Nota

Si la última línea de código del archivo de código fuente .il no tiene espacio en blanco al final o un carácter de fin de línea, podría producirse un error en la compilación.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.

Se puede usar Ilasm.exe conjuntamente con su herramienta complementaria Ildasm.exe.You can use Ilasm.exe in conjunction with its companion tool, Ildasm.exe. Ildasm.exe toma un archivo PE que contiene código IL y crea un archivo de texto adecuado como entrada para Ilasm.exe.Ildasm.exe takes a PE file that contains IL code and creates a text file suitable as input to Ilasm.exe. Esta técnica es muy útil cuando, por ejemplo, se compila código en un lenguaje de programación que no admite todos los atributos de metadatos en tiempo de ejecución.This is useful, for example, when compiling code in a programming language that does not support all the runtime metadata attributes. Una vez compilado el código y ejecutada la salida mediante Ildasm.exe, el archivo de texto de IL resultante se puede editar manualmente para agregar los atributos que faltan.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. Después, se puede ejecutar este archivo de texto mediante Ilasm.exe para producir un archivo ejecutable final.You can then run this text file through the Ilasm.exe to produce a final executable file.

También se puede usar esta técnica para generar un único archivo PE a partir de varios archivos PE generados originalmente por compiladores diferentes.You can also use this technique to produce a single PE file from several PE files originally generated by different compilers.

Nota

Actualmente no se puede usar esta técnica con archivos PE que contienen código nativo incrustado (por ejemplo, archivos PE generados por Visual C++).Currently, you cannot use this technique with PE files that contain embedded native code (for example, PE files produced by Visual C++).

Para que este uso combinado de Ildasm.exe e Ilasm.exe sea lo más preciso posible, de forma predeterminada, el ensamblador no sustituye las codificaciones cortas por las largas que se hayan podido escribir en los códigos fuente de IL (o que haya emitido otro compilador).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). Use la opción /optimize para sustituir las codificaciones cortas siempre que sea posible.Use the /optimize option to substitute short encodings wherever possible.

Nota

Ildasm.exe solo funciona en archivos existentes en disco.Ildasm.exe only operates on files on disk. No funciona en archivos instalados en la caché global de ensamblados.It does not operate on files installed in the global assembly cache.

Para obtener más información sobre la gramática de IL, vea el archivo asmparse.grammar en Kit de desarrollo de software de Windows (SDK)Windows Software Development Kit (SDK).For more information about the grammar of IL, see the asmparse.grammar file in the Kit de desarrollo de software de Windows (SDK)Windows Software Development Kit (SDK).

Información de versiónVersion Information

A partir de .NET Framework 4.5.NET Framework 4.5, se puede asociar un atributo personalizado a una implementación de interfaz mediante código similar al siguiente: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 partir de .NET Framework 4.5.NET Framework 4.5, se puede especificar un objeto binario grande (BLOB) de cálculo de referencias arbitrario mediante su representación binaria sin formato, como se muestra en el código siguiente: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

Para obtener más información sobre la gramática de IL, vea el archivo asmparse.grammar en Kit de desarrollo de software de Windows (SDK)Windows Software Development Kit (SDK).For more information about the grammar of IL, see the asmparse.grammar file in the Kit de desarrollo de software de Windows (SDK)Windows Software Development Kit (SDK).

EjemplosExamples

El comando siguiente ensambla el archivo IL myTestFile.il y genera el archivo ejecutable myTestFile.exe.The following command assembles the IL file myTestFile.il and produces the executable myTestFile.exe.

ilasm myTestFile

El comando siguiente ensambla el archivo IL myTestFile.il y genera el archivo .dll myTestFile.dll.The following command assembles the IL file myTestFile.il and produces the .dll file myTestFile.dll.

ilasm myTestFile /dll

El comando siguiente ensambla el archivo IL myTestFile.il y genera el archivo .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

En el siguiente ejemplo de código se muestra una aplicación muy simple que muestra "Hello World!"The following code example shows an extremely simple application that displays "Hello World!" en la consola.to the console. Puede compilar este código y, después, usar la herramienta Ildasm.exe para generar un archivo 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!");
    }
}

El siguiente ejemplo de código IL se corresponde con el ejemplo de código de C# anterior.The following IL code example corresponds to the previous C# code example. Puede compilar este código en un ensamblado con la herramienta Ensamblador de IL.You can compile this code into an assembly using the IL Assembler tool. Tanto el ejemplo de código IL como el de C# muestran "Hello World!"Both IL and C# code examples display "Hello World!" en la consola.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

Vea tambiénSee also