Ensamblajes

Ensamblajes

En la columna del mes pasado, presenté una descripción general de .Net, mirando su estructura y contenido. Este mes, quiero mirar con más detalle a .Asambleas netas: qué son, por qué importan y lo que puedes hacer con ellos. Ilustraré estos conceptos utilizando un código C# simple y las herramientas suministradas con ambos .Marco neto y el .Marco neto sdk. Primero, sin embargo, una actualización sobre el estado de versión actual del .NET Framework.

Entre el momento en que envié mi primera columna y esta, Microsoft ha lanzado la última versión del .NET Framework, .Net 2, junto con Visual Studio 2005 y SQL Server 2005. El mes pasado, le di algunos consejos para las descargas relevantes, algunas de las cuales pueden haber cambiado, así que he configurado una nueva página en www.requería.net, que contiene todas las URL a las que me referiré en cada artículo. Estas URL se actualizan siempre que sea necesario, por lo que deben estar al día. También incluiré consejos adicionales para más información, fragmentos de código y cualquier otra cosa que pueda pensar que pueda encontrar útil.

Conceptos básicos de ensamblaje

Antes de sumergirse en cómo funcionan las asambleas, creo que es útil hablar un poco sobre cómo Windows carga programas y cómo .Net encaja en el esquema de las cosas. El cargador de Windows es un componente del sistema operativo responsable de cargar un programa ejecutable en la memoria y comenzar a ejecutarlo, un componente vital que tendemos a dar por sentado. En el entorno WIN32, los archivos que son ejecutables, es decir, los archivos EXE y DLL, tienen un formato interno común conocido como ejecución portátil, o PE, formato.

El bit 'portátil' se refiere al hecho de que en un momento los archivos ejecutables podrían ejecutarse en múltiples plataformas, por lo que era necesario un formato de archivo común. El formato PE inicialmente vino del mundo de Vax, pero fue adoptado para Windows NT. El formato básico de PE se diseñó por primera vez en los días de MS-DOS, hace más de 30 años, pero se ha modificado con el tiempo y para .Windows netos y de 64 bits se ha sometido a modificaciones adicionales. (Si bien la mayoría de las cosas han avanzado, es interesante que los dos primeros bytes de cualquier archivo de PE todavía contengan los caracteres 'MZ' después de Mark Zbikowski, uno de los arquitectos DOS originales.)

Los archivos PE comienzan con una pequeña sección del código ejecutable de MS-DOS, que fue útil en los primeros días de Windows: si intentó ejecutar un ejecutable de Windows en una máquina sin cargar Windows, el programa podría mostrar un mensaje que señala que Windows fue requerido. Para obtener más información sobre el formato PE, consulte MSDN.Microsoft.com y msdn.Microsoft.comunicarse

Con ese poco de fondo en su lugar, ¿qué es exactamente una asamblea y por qué juega un papel clave en el .Arquitectura neta? Un ensamblaje es una unidad de código de programa que construye e implementa como una sola unidad, muy similar a un archivo exe o DLL tradicional. El ensamblaje es la unidad clave de implementación bajo .Net, y un ensamblaje también es un límite de seguridad, ya que puede otorgar permisos al nivel del ensamblaje único (estaré cubriendo .Seguridad neta más plenamente en un artículo o artículos posteriores). La Figura 1 muestra el contenido de un ensamblaje típico, que incluye:

Metadatos de ensamblaje: información que describe el ensamblaje en detalle.

Tipo de metadatos: información sobre los tipos que implementa este ensamblaje.

Código: Este es código de lenguaje interpretado de MS (MSIL) que implementa los tipos definidos en este ensamblaje. El código MSIL se compila en el código nativo por el compilador justo a tiempo siempre que la aplicación se ejecute. Como cubriré esto en un artículo futuro, también puedes usar el NGEN.EXE UTILIDAD PARA COMPILAR un ensamblaje en un código nativo que reside en el caché de ensamblaje global (GAC).