Los ensamblados y el código IL
description
Transcript of Los ensamblados y el código IL
Los ensamblados y el código IL
ContenidoMódulo¿Qué es un Ensamblado?El código MSIL
MódulosEn .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.
EnsambladoUn 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.
Assembly
Metadata
Código CompiladoMSIL
Recursos
MiBiblioteca.DLL
Descripción de TiposClasesClases BaseInterfaces ImplementadasAtributos de las ClasesMétodos de las Clases
NombreVersiónCultura
Manifiesto del Assembly
Otros AssembliesPermisos de SeguridadTipos Externos
NETModuleEn .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 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 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?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
Manifiest
Global 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?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 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 .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
Ensamblado
MSILMicrosoft 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 - 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 MSIL
ILDASMHerramienta para navegar por el IL de un PE