2011-03-29 12 views
23

Ensamblaje en .NET Framework es, según tengo entendido, archivo de idioma intermedio + algunos metadatos, manifiesto y tal vez algo más.¿Por qué es un archivo ensamblador .exe?

CLR traduce un ensamblaje al código de máquina, que se puede ejecutar en la máquina local determinada.

Eso significa que el ensamblaje no debe ser ejecutable por la máquina antes de ser procesado por CLR. Si es así, ¿por qué tiene extensión .exe, que es ejecutable en máquinas con Windows?

+0

Etiquetas editadas; [assembly] es para preguntas en lenguaje ensamblador. –

+0

[¿mito de metadatos CLR en un módulo administrado?] (Http://izlooite.blogspot.com/2009/09/what-is-clr-metadata-in-managed-module.html#more) –

+0

Para obtener un resumen detallado de Por qué funciona esto, vea este [artículo] (http://it.toolbox.com/blogs/coding-dotnet/net-portable-executable-file-11836). – CodeNaked

Respuesta

24

Dado que Windows necesita para crear un proceso y lo primero que hará es .exe a anfitrión CLR cargando mscoree.

De CLR via C#:

Después de que Windows ha examinado la cabecera del archivo EXE para determinar si debe crear un proceso de 32 bits, un proceso de 64 bits , o un proceso de WoW64, Ventanas cargas de las x86, x64 o IA64 versión de MSCorEE.dll en la dirección del proceso espacio. En una versión x86 de Windows, , la versión x86 de MSCorEE.dll puede ser que se encuentra en el directorio C: \ Windows \ System32 . En un x64 o la versión IA64 de Windows, la versión x86 de Mscoree.dll se pueden encontrar en la directorio C: \ Windows \ SysWow64, mientras que la versión de 64 bits (x64 o IA64) se pueden encontrar en la C: \ Windows \ System32 directory (para razones de compatibilidad con versiones anteriores). Luego, el hilo primario del proceso llama a un método definido dentro de MSCorEE.dll. Este método inicializa el CLR, carga el ensamblado EXE y luego llama a su método de punto de entrada (Principal). En este punto , la aplicación administrada está activa y ejecutándose.

1

A .NET .exe es un tipo especial de .exe que cargará primero el CLR (Common Language Runtime). Luego compilará el código IL dentro del .exe a través del CLR.

Un .exe compilado a través del .NET framework es un tipo de Portable Executable. El .exe tiene una sección CLR Header y CLR Data. Cuando se carga el .exe, el sistema operativo cederá el control al CLR. La sección de datos CLR en el .exe tiene un metadato y un segmento IL (lenguaje intermedio). El segmento de metadatos contiene información sobre el ensamblaje (como el manifiesto de ensamblaje). El segmento IL contiene el código para el programa en formato IL. Este es un formato intermedio similar al bytecode de Java.

0

Dado que todavía es un EXEcutable.

+1

También lo son .bat, .py, .com, .class, etc. – Blorgbeard

+0

Bueno, sí. Pero no están compilados en el código IL inventado por Microsoft;) – jgauffin

+0

Heh, por lo que su respuesta se convierte en "porque MS lo dijo": P – Blorgbeard

7

Recientemente escribí blog post en el código CLR en un ensamblado .NET y cómo encaja dentro del formato ejecutable del archivo PE. La serie completa se puede encontrar here.

Esencialmente, dentro de un ensamblado .NET hay un pequeño código nativo que inicia el CLR. Sin embargo, este código solo existe por compatibilidad con versiones anteriores. Desde Windows XP, el cargador del sistema operativo sabe de forma nativa cargar el CLR para el ejecutable que tiene el encabezado CLI en ellos.