Ilasm.exe (Ensamblador de MSIL)

El Ensamblador de MSIL genera un archivo ejecutable portable (PE) a partir del Lenguaje intermedio de Microsoft (MSIL). (Para obtener más información sobre MSIL, vea Proceso de ejecución administrada.) Se puede ejecutar el archivo ejecutable resultante, que contiene MSIL y los metadatos requeridos, para determinar si MSIL se comporta de acuerdo con lo esperado.

Esta herramienta se instala automáticamente con Visual Studio y con el SDK de Windows. Para ejecutar la herramienta, se recomienda usar el símbolo del sistema de Visual Studio o del SDK de Windows (shell de CMD). Estas utilidades permiten ejecutar la herramienta fácilmente, sin navegar a la carpeta de instalación. Para obtener más información, vea Símbolos del sistema del SDK de Windows y Visual Studio.

  • Si tiene instalado Visual Studio en el equipo: en la barra de tareas, haga clic en Start, All Programs, Visual Studio y Visual Studio Tools y, a continuación, haga clic en Visual Studio Command Prompt.

    O bien

    Si tiene el SDK de Windows instalado en el equipo: en la barra de tareas, haga clic en Start, All Programs, haga clic en la carpeta del SDK de Windows y, a continuación, haga clic en Command Prompt (o CMD Shell).

  • En el símbolo del sistema, escriba:

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

Parámetros

Argumento

Descripción

filename

Nombre del archivo de código fuente con extensión .il. Este archivo consta de directivas de declaraciones de metadatos e instrucciones simbólicas de MSIL. Con Ilasm.exe se pueden proporcionar varios archivos de código fuente como argumentos para producir un único archivo PE.

NotaNota
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.

Opción

Descripción

/alignment=entero

Establece FileAlignment en el valor especificado por integer en el encabezado opcional NT. Si se especifica la directiva IL .alignment en el archivo, esta opción la reemplaza.

/base=entero

Establece ImageBase en el valor especificado por integer en el encabezado opcional NT. Si se especifica la directiva IL .imagebase en el archivo, esta opción la reemplaza.

/clock

Mide e informa de los siguientes tiempos de compilación en milisegundos para el archivo de código fuente .il especificado:

Total Run: tiempo total empleado en la ejecución de todas las operaciones específicas que se muestran a continuación.

Startup: carga y apertura del archivo.

Emitting MD: emisión de metadatos.

Ref to Def Resolution: resolución de referencias en definiciones en el archivo.

CEE File Generation: generación de la imagen de archivo en memoria.

PE File Writing: escritura de la imagen en un archivo PE.

/debug[=IMPL|OPT]

Incluye información de depuración (nombres de argumento y variable local, y números de línea). Crea un archivo PDB.

/debug sin ningún valor adicional deshabilita la optimización JIT y utiliza puntos de secuencia del archivo PDB.

IMPL deshabilita la optimización JIT y utiliza puntos de secuencia implícitos.

OPT habilita la optimización JIT y utiliza puntos de secuencia implícitos.

IMPL y OPT constituyen una novedad de la versión 2.0 de .NET Framework.

/dll

Produce un archivo .dll como resultado.

/enc=file

Crea deltas Editar y continuar a partir del archivo de código fuente especificado.

Este argumento es sólo para uso académico, no se admite el uso comercial del mismo.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/exe

Produce un archivo ejecutable como resultado. Éste es el valor predeterminado.

/flags=entero

Establece ImageFlags en el valor especificado por integer en el encabezado de Common Language Runtime. Si está especificada la directiva .corflags de IL en el archivo, esta opción la reemplazará. Vea CorHdr.h, COMIMAGE_FLAGS para obtener una lista de valores válidos de integer.

/fold

Forma un solo cuerpo a partir de cuerpos de métodos idénticos.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/include=includePath

Establece una ruta de acceso para buscar los archivos incluidos con #include.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/itanium

Especifica Intel Itanium como procesador de destino.

Si no se especifican los bits de imagen, /pe64 será el valor predeterminado.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/key:archivoClave

Compila el argumento filename con una firma segura utilizando la clave privada contenida en keyFile.

/key:@claveOrigen

Compila el argumento filename con una firma segura utilizando la clave privada producida en keySource.

/listing

Muestra la lista de mensajes en el dispositivo de salida estándar. Si se omite esta opción, no se produce un archivo de lista.

Este parámetro no es compatible con .NET Framework versión 2.0 o posterior.

/mdv=versionString

Establece la cadena de versión de metadatos.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/msv=major.minor

Establece la versión del flujo de metadatos, donde major y minor son valores enteros.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/noautoinherit

Deshabilita la herencia predeterminada de Object cuando no se especifica ninguna clase base.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/nocorstub

Suprime la generación del código auxiliar de CORExeMain.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/nologo

Suprime la presentación de la portada de inicio de Microsoft.

/output:file.ext

Especifica el nombre y la extensión del archivo de salida. De forma predeterminada, el nombre del archivo de salida coincide con el nombre del primer archivo de código fuente tratado. La extensión predeterminada es .exe. Si se especifica la opción /dll, la extensión predeterminada es .dll.

NotaNota
El hecho de especificar /output:myfile.dll no supone el establecimiento de la opción /dll .Si no se especifica /dll, el resultado será un archivo ejecutable denominado myfile.dll.

/optimize

Optimiza las instrucciones largas en instrucciones cortas. Por ejemplo, br en br.s.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/pe64

Crea una imagen de 64 bits (PE32+).

Si no se especifica un procesador de destino, /itanium será el valor predeterminado.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/pdb

Crea un archivo PDB sin habilitar un seguimiento de la información de depuración.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/quiet

Especifica el modo no interactivo; no se notifica el progreso del ensamblado.

/resource:archivo.res

Incluye el archivo de recursos especificado con formato *.res en el archivo .exe o .dll resultante. Sólo se puede especificar un archivo .res con la opción /resource.

/stack=stackSize

Establece el valor SizeOfStackReserve del encabezado opcional NT en stackSize.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/stripreloc

Especifica que no es necesaria ninguna reubicación base.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/subsystem=entero

Establece subsystem en el valor especificado por integer en el encabezado opcional NT. Si se especifica la directiva IL .subsystem en el archivo, este comando lo reemplaza. Vea winnt.h, IMAGE_SUBSYSTEM para ver una lista de los valores válidos para integer.

/x64

Especifica un procesador AMD de 64 bits como procesador de destino.

Si no se especifican los bits de imagen, /pe64 será el valor predeterminado.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/?

Muestra la sintaxis de comandos y opciones para la herramienta.

NotaNota

Todas las opciones de Ilasm.exe no distinguen mayúsculas de minúsculas, y se reconocen mediante las tres primeras letras.Por ejemplo, /lis equivale a /listing y /res:miarchivores.res equivale a /resource:miarchivores.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.Por ejemplo, /output:file.ext equivale a /output=file.ext.

Comentarios

El ensamblador de MSIL ayuda a los proveedores de herramientas a diseñar e implementar generadores de MSIL. Mediante la utilización de Ilasm.exe, los programadores de herramientas y compiladores se pueden concentrar en la generación de MSIL y metadatos despreocupándose de la emisión de MSIL en el formato de archivo PE.

Al igual que otros compiladores orientados a Common Language Runtime, como C# y Visual Basic, Ilasm.exe no produce archivos intermedios de objetos y no requiere una fase de vinculación para crear un archivo PE.

El ensamblador de MSIL puede expresar todos los metadatos existentes y las características de MSIL que caracterizan a los lenguajes de programación orientados a Common Language Runtime. Esto permite que el código administrado escrito en cualquiera de estos lenguajes de programación se pueda expresar en el Ensamblador de MSIL y compilar con Ilasm.exe de forma correcta.

NotaNota

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.

Se puede utilizar Ilasm.exe conjuntamente con su herramienta complementaria Ildasm.exe. Ildasm.exe toma un archivo PE que contiene código MSIL y crea un archivo de texto que se pueda usar como entrada para 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. Una vez compilado el código y ejecutados los resultados mediante Ildasm.exe, el archivo de texto de MSIL resultante se puede editar manualmente para agregar los atributos que faltan. A continuación, se puede ejecutar este archivo de texto mediante Ilasm.exe para producir un archivo ejecutable final.

También se puede utilizar esta técnica para producir un único archivo PE a partir de varios archivos PE generados originalmente por varios compiladores diferentes.

NotaNota

Actualmente no se puede utilizar esta técnica con archivos PE que contienen código nativo incrustado (por ejemplo, archivos PE producidos por Visual C++).

Para que la utilización combinada de Ildasm.exe e Ilasm.exe tenga la mayor precisión posible, el ensamblador no realiza optimizaciones simples ni se detiene a considerar si debe utilizar instrucciones en formato largo o corto. Por ejemplo, la herramienta no intenta determinar si puede sustituir una codificación con formato corto por otra con formato largo que se haya podido escribir en los códigos fuente MSIL (o que pueda emitir otro compilador). Si se desea la codificación con formato corto, se debe escribir explícitamente con dicho formato. No obstante, el ensamblador comprueba si hay condiciones fuera del intervalo donde esto sea posible.

NotaNota

Ildasm.exe sólo opera en archivos existentes en disco.No opera en archivos instalados en la caché global de ensamblados.

Para obtener más información sobre la gramática de MSIL, vea el archivo asmparse.grammar en Kit de desarrollo de software de Windows (SDK).

Ejemplos

El comando siguiente ensambla el archivo MSIL myTestFile.il y produce el archivo ejecutable myTestFile.exe.

ilasm myTestFile

El comando siguiente ensambla el archivo MSIL myTestFile.il y produce el archivo .dll myTestFile.dll.

ilasm myTestFile /dll 

El comando siguiente ensambla el archivo MSIL myTestFile.il y produce el archivo .dll 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!" en la consola. Puede compilar este código y, a continuación, utilizar la herramienta Ildasm.exe para generar un archivo MSIL.

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

El siguiente ejemplo de código de MSIL se corresponde con el ejemplo de código de C# anterior. Puede compilar este código en un ensamblado utilizando la herramienta Ilasm.exe (Ensamblador de MSIL). Tanto el ejemplo de código de MSIL como el de C# muestran "Hola a todos" en la consola.

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

Referencia

Ildasm.exe (Desensamblador de MSIL)

Símbolos del sistema del SDK de Windows y Visual Studio

Conceptos

Proceso de ejecución administrada

Otros recursos

Herramientas de .NET Framework

Historial de cambios

Fecha

Historial

Motivo

1 de abril de 2011

Se agregó información sobre el uso de los símbolos del sistema de Visual Studio y del SDK de Windows.

Mejora de la información.