Los ensamblados y el código IL
Los ensamblados y el código IL
ContenidoContenido
Módulo¿Qué es un Ensamblado?El código MSIL
MódulosMódulos
En .NET Framework se llama Módulo a un archivo DLL o EXE.Contiene código en Lenguaje Intermedio (IL), metadatos y opcionalmente el manifiesto del Ensamblado (Assembly).Pueden ser de 2 tipos:
- Archivos de Recursos.- Archivos de Código compilado.
EnsambladoEnsambladoUn ensamblado es la unidad mínima (primaria) de distribución, implantación y versionado en .NETEs autodescriptivo e independiente de la plataforma.Tiene extensión DLL o EXE (PE)Compuesto de un manifiesto y de uno o más módulos.Parecido al código ensamblador, pero de alto nivel.Todas las aplicaciones .NET generan código MSIL.
AssemblyAssembly
Metadata
Código CompiladoMSIL
Recursos
MiBiblioteca.DLL
Descripción de Tipos
ClasesClases BaseInterfaces ImplementadasAtributos de las ClasesMétodos de las Clases
NombreVersiónCultura
Manifiesto del Assembly
Otros AssembliesPermisos de SeguridadTipos Externos
NETModuleNETModule
En .NET, existe un tercer tipo de archivo (que no es un ensamblado, sino parte de él).Se utiliza para conformar un solo ensamblado de varios archivos.Son archivos con extensión *.netmoduleNo se pueden utilizar directamente como ensamblados.Un módulo no es un ensamblado, sino sólo una pieza para formar uno.
Tipos de EnsambladosTipos de Ensamblados
Assemby sencillo
Resources
MSIL
MetaData
Manifest
ThisAssembly.dll
Resources
MSIL
MetaData
Manifest
ThisAssembly.dll
MSIL
Metadata
A.netmodule
B.netmodule
Manifest(No Assembly Metadata)
MSIL
Metadata
Manifest(No Assembly Metadata)
Assembly complejo
Características de un AssemblyCaracterísticas de un Assembly Unidad de distribución
Uno o mas archivos independientemente del empaquetado ( packaging)
Auto descriptivo usando el metadata Reflection
Versionado Capturada por el Compilador
Frontera de Seguridad Contienen permisos de ejecución
Seguridad basada en evidencias Los métodos pueden demandar pruebas
de permisos concedido para todo el proceso de ejecución.
Que es el Metadata?Que es el Metadata?Describe a un assembly
Identifica: Nombre, versión, Cultura, Llaves publicasQue tipos son exportadosA que otros assemblys hace referenciaPermisos que se necesitan para la ejecución
Descripción de tiposNombre, visibilidad, clases base, interfaces que implementaMiembros ( métodos, campos, propiedades, eventos, tipos anidados)
Sentencias declarativasAtributos definido por el usuarioAtributos definidos por el compiladorAtributos definidos por el framework
ManifiestManifiest
Global Assembly CacheGlobal Assembly Cache Cache a nivel máquina Almacena assemblies que deben ser
compartidos por diferentes aplicaciones
Instalar en GAC solo los assemblies que deben ser compartidos y mantener privados a los que no
Para instalar en GAC un assembly Utilizar un instalador Utilizar la herramienta gacutil.exe Utilizar el Windows Explorer para
arrastrar los assemblies al cache
Que son los AppDomains?Que son los AppDomains?Procesos lógicos dentro del CLR
Corren dentro de un proceso del Sistema OperativoUn proceso del sistema operativo puede contener varios AppDomains
Es mucho mas barato que múltiple procesos del sistema operativo
Mucho menos costoso el intercambio de ejecución
Un assembly y sus tipos son siempre cargados dentro de un AppDomainProvee una frontera para
FallosTiposSeguridad
CLR, AppDomains y AssembliesCLR, AppDomains y Assemblies
Operating System ProcessOperating System Process
CLR (MSCOREE.DLL)
AppDomain A AppDomain B
Assembly1.dll
Assembly2.dll
AssemblyMain.exe
Assembly3.dll
Assembly4.dll
Type A Type B
Type C Type D
Type E Type F
Type Q
Type X Type YType P
Assembly1.dll
Type A Type B
Assemblies - Aplicaciones .NETAssemblies - Aplicaciones .NET
Al ejecutar una aplicación, ¿cómo ubico los assemblies necesarios?
El Class Loader busca en el directorio local (preferido)Global Assembly Cache (GAC)
Diferentes aplicaciones pueden usar diferentes versiones
Actualizaciones más simplesDesinstalación más simple
EnsambladoEnsamblado
MSILMSIL
Microsoft Intermediate Language Es el lenguaje nativo de .NET.Como su nombre lo indica es el Lenguaje Intermedio entre la aplicación y el procesador.Independiente al Procesador en el que se vaya a ejecutar.Parecido al código ensamblador, pero de alto nivel.Todas las aplicaciones .NET generan código MSIL.
CLR - MSILCLR - MSIL
.method private hidebysig static void Main(string[] args) cil managed {
.entrypoint maxstack 8 L_0000: ldstr "Hola Mundo" L_0005: call void
[mscorlib]System.Console::WriteLine(string) L_000a: ret }
Código MSILCódigo MSIL
ILDASMILDASM
Herramienta para navegar por el IL de un PE