ensamblados y appdomains
TRANSCRIPT
Ensamblados y Ensamblados y AppDomainsAppDomains
Cap. 14 – BalenaCap. 14 – Balena
UAI – Facultad de Tecnología InformáticaUAI – Facultad de Tecnología InformáticaIngeniería en sistemas informáticosIngeniería en sistemas informáticosProgramación Orientada a Objetos Programación Orientada a Objetos
20072007
Ensamblado (concepto)Ensamblado (concepto)
1/+ Módulos administrados = 1 Assembly 1/+ Módulos administrados = 1 Assembly (para el .NET Framework)(para el .NET Framework)
Concepto físico: “Colección de uno o más Concepto físico: “Colección de uno o más módulos ejecutables o no”módulos ejecutables o no”
Concepto lógico: “Menor unidad de Concepto lógico: “Menor unidad de software reutilizable y susceptible de ser software reutilizable y susceptible de ser implementado con control de versiones”implementado con control de versiones”
Módulos (elementos)Módulos (elementos)
Encabezado PE (Portable Encabezado PE (Portable Excecutable)Excecutable)
Encabezado de archivo de .NET Encabezado de archivo de .NET FrameworkFramework
MetadatosMetadatos
MSILMSIL
Módulos (elementos)Módulos (elementos)
Encabezado PE y de .NETEncabezado PE y de .NET
Común en todos los ejecutables de Común en todos los ejecutables de windowswindows
Diferencia en Ensablados: Contiene JMP a Diferencia en Ensablados: Contiene JMP a puntos de entrada _CorExeMain o puntos de entrada _CorExeMain o _CorDllMain de MsCorEE (RunTime de .NET)_CorDllMain de MsCorEE (RunTime de .NET)
Se carga Assembly en memoria (si no Se carga Assembly en memoria (si no estaba ya) y acciona el JITestaba ya) y acciona el JIT
Módulos (elementos)Módulos (elementos)
MetadatosMetadatos
Definición de tipos internos y tipos Definición de tipos internos y tipos referidos y vinculadosreferidos y vinculados
Inseparables del módulo y viceversaInseparables del módulo y viceversa
Principales funciones: Código Principales funciones: Código administrado seguro, y Reflectionadministrado seguro, y Reflection
Módulos (elementos)Módulos (elementos)
MSILMSIL
Código intermedioCódigo intermedio
PortablePortable
Optimizable por el compilador a Optimizable por el compilador a código nativo para la plataforma de código nativo para la plataforma de ejecuciónejecución
Ensamblados (elementos)Ensamblados (elementos)
ManifiestoManifiesto
MetadataMetadata
MSILMSIL
RecursosRecursos
Ensamblados (elementos)Ensamblados (elementos)
ManifiestoManifiesto
Asimilado a metadatos (los incluye)Asimilado a metadatos (los incluye)
Información de Versionado, Información de Versionado, Nombre, Compañía, Firma digital, Nombre, Compañía, Firma digital, Plataformas compatibles, etcPlataformas compatibles, etc
Información principal de tipos Información principal de tipos (incluyendo módulos internos)(incluyendo módulos internos)
Ensamblados (elementos)Ensamblados (elementos)
MetadataMetadata
Definición de tipos internos y Definición de tipos internos y tipos referidos y vinculadostipos referidos y vinculados
Principales funciones: Código Principales funciones: Código administrado seguro, y Reflectionadministrado seguro, y Reflection
Ensamblados (elementos)Ensamblados (elementos)
MSILMSIL
Código portable y compilable Código portable y compilable por el JIT a código nativopor el JIT a código nativo
Ensamblados (elementos)Ensamblados (elementos)
RecursosRecursos
Elemento no ejecutableElemento no ejecutable
Imágenes, cadenas de texto, Imágenes, cadenas de texto, íconos, etc.íconos, etc.
OpcionalOpcional
Ensamblados (elementos)Ensamblados (elementos)
Manifiesto
Metadatos
MSIL
Recursos
Ensamblado de un solo archivoEnsamblado de un solo archivo
MiEnsamblado.dllMiEnsamblado.dll
Ensamblados (elementos)Ensamblados (elementos)
Manifiesto
Metadatos
MSIL
Recursos
Ensamblado de más de un archivoEnsamblado de más de un archivo
Manifiesto (del módulo)
Metadatos
MSIL
Manifiesto (del módulo)
Metadatos
MSIL
MiEnsamblado.dllMiEnsamblado.dll
EnsambladosEnsamblados
Privados: Se instalan con la Privados: Se instalan con la aplicaciónaplicación
Públicos: Compartidos entre Públicos: Compartidos entre aplicaciones. Se instalan en el aplicaciones. Se instalan en el
GACGAC
EnsambladosEnsambladosEnsamblados públicos y privados. Ensamblados públicos y privados. DiferenciasDiferencias..
Públicos permiten control de Públicos permiten control de versiones. Pueden coexistir distintas.versiones. Pueden coexistir distintas. Públicos tienen administración más Públicos tienen administración más profunda de seguridad.profunda de seguridad. Públicos solo levantan una instancia Públicos solo levantan una instancia para las aplicaciones.para las aplicaciones. Públicos pueden ser firmados. Públicos pueden ser firmados.
EnsambladosEnsamblados
Nombres segurosNombres seguros
Evita conflictos de Evita conflictos de ensamblados públicosensamblados públicos Utilidad SN (generación de Utilidad SN (generación de firma para ensamblados)firma para ensamblados) Archivos .snk (claves pública y Archivos .snk (claves pública y privada)privada)Firma parcial y demorada Firma parcial y demorada (delaysign). Archivo .key(delaysign). Archivo .key
EnsambladosEnsambladosEnlace en tiempo de ejecución Enlace en tiempo de ejecución (elementos)(elementos)
NombreNombre
Versión (solo públicos)Versión (solo públicos)
Referencia culturalReferencia cultural
Clave pública (solo públicos)Clave pública (solo públicos)
EnsambladosEnsambladosEnlace en tiempo de ejecución Enlace en tiempo de ejecución (pasos)(pasos)
1.1. Verificación de directiva de versión en Verificación de directiva de versión en archivos de configuraciónarchivos de configuración
2.2. Utilización del ensamblado (si se cargó Utilización del ensamblado (si se cargó antes)antes)
3.3. Búsqueda en el GACBúsqueda en el GAC
4.4. Búsqueda según sugerencias de código Búsqueda según sugerencias de código basebase
5.5. Búsqueda en el árbol directorio de la Búsqueda en el árbol directorio de la aplicaciónaplicación
EnsambladosEnsambladosEnlace en tiempo de ejecución Enlace en tiempo de ejecución (Directivas de versión)(Directivas de versión)
Archivos de configuración:Archivos de configuración: De aplicación De aplicación
(nombreaplicacion.exe.config)(nombreaplicacion.exe.config) De fabricante (para GAC)De fabricante (para GAC) De equipo De equipo (\Windows\Microsoft.NET\(\Windows\Microsoft.NET\
Framework\[Framework\[versión del frameworkversión del framework]\Config\]\Config\
machine.configmachine.config))
EnsambladosEnsambladosEnlace en tiempo de ejecución Enlace en tiempo de ejecución (Directivas de versión)(Directivas de versión)
<configuration><configuration>
<runtime><runtime>
<assemblyBinding xmlns:”[URI]”><assemblyBinding xmlns:”[URI]”>
<dependentAssembly><dependentAssembly>
<assemblyIdentity name=“MiAssembly”<assemblyIdentity name=“MiAssembly”
publicKeyToken=“xxxxx” culture=“es-publicKeyToken=“xxxxx” culture=“es-ar”/>ar”/>
<bindingRedirect oldVersion=“x.x.x”<bindingRedirect oldVersion=“x.x.x”
newVersion=“x.x.y”/>newVersion=“x.x.y”/>
<publisherPolicyApply=“no”/><publisherPolicyApply=“no”/>
<codeBase version=“xx.x.x” href=“<codeBase version=“xx.x.x” href=“http://xx.com/x.dl”lhttp://xx.com/x.dl”l/>/>
</dependentAssembly></dependentAssembly>
</assemblyBinding></assemblyBinding>
</runtime></runtime>
</configuration></configuration>
EnsambladosEnsambladosEnlace en tiempo de ejecución Enlace en tiempo de ejecución (Ensamblados cargados previamente)(Ensamblados cargados previamente)
Verifica si el ensamblado se ha cargado Verifica si el ensamblado se ha cargado previamente en caché (por esta aplicación previamente en caché (por esta aplicación u otra)u otra)
Se identifica con nombre seguro Se identifica con nombre seguro
EnsambladosEnsambladosEnlace en tiempo de ejecución Enlace en tiempo de ejecución (Búsqueda en el GAC)(Búsqueda en el GAC)
Verifica si el ensamblado se encuentra en Verifica si el ensamblado se encuentra en el GAC (si se trata de un ensamblado el GAC (si se trata de un ensamblado público)público)
Se identifica con nombre seguro Se identifica con nombre seguro
EnsambladosEnsambladosEnlace en tiempo de ejecución Enlace en tiempo de ejecución (Sugerencias de código base)(Sugerencias de código base)
Definidas en archivos de configuraciónDefinidas en archivos de configuración
Desactivan el “Sondeo”Desactivan el “Sondeo”
Muy útil si se descargan ensamblados de Muy útil si se descargan ensamblados de Internet Internet
EnsambladosEnsambladosEnlace en tiempo de ejecución Enlace en tiempo de ejecución (Sondeo)(Sondeo)
Búsqueda en el directorio de la aplicación Búsqueda en el directorio de la aplicación o subdirectorioso subdirectorios
Búsqueda heurística empleando algunos Búsqueda heurística empleando algunos elementos del nombre seguro + ruta elementos del nombre seguro + ruta binaria (definida opcionalmente en binaria (definida opcionalmente en archivos de configuración)archivos de configuración)
EnsambladosEnsambladosHerramienta de configuración Herramienta de configuración de .NET Framework y de .NET Framework y aplicacionesaplicaciones
Parte de la Microsoft Management ConsoleParte de la Microsoft Management Console
Línea de comandos: “MMC”Línea de comandos: “MMC”
Archivo/Agregar o quitar Archivo/Agregar o quitar complemento/Agregar/.NET Framework complemento/Agregar/.NET Framework X.X ConfigurationX.X Configuration
EnsambladosEnsambladosHerramientas de línea de comandosHerramientas de línea de comandos
Compliladores (vbc, csc, jsc ,etc)Compliladores (vbc, csc, jsc ,etc) Vinculador de ensamblados (AL)Vinculador de ensamblados (AL) Utilidad de nombre seguro (NS)Utilidad de nombre seguro (NS) Utilidad de GAC (GACUTIL)Utilidad de GAC (GACUTIL) Desensamblador MSIL (ILDASM)Desensamblador MSIL (ILDASM) Compilador a nativo (NGEN)Compilador a nativo (NGEN)
AppDomainsAppDomains
Concepto: “Es una aplicación administrada de Concepto: “Es una aplicación administrada de forma lógica que se ejecuta dentro de un forma lógica que se ejecuta dentro de un proceso físico ”proceso físico ”
AppDomain A
AppDomain B
AppDomain C
AppDomain D
Proceso 2 del SOProceso 1 del SO
AppDomainsAppDomains
Las aplicaciones pueden comunicarse Las aplicaciones pueden comunicarse entre distintos AppDomains y Procesosentre distintos AppDomains y Procesos
AppDomain A
AppDomain B
AppDomain C
AppDomain D
Proceso 2 del SOProceso 1 del SO
AppDomainsAppDomains
Puede haber distintas instancias Puede haber distintas instancias de una misma aplicación de una misma aplicación ejecutándose en el mismo ejecutándose en el mismo proceso de Windows en proceso de Windows en diferentes AppDomainsdiferentes AppDomains
AppDomains (la clase AppDomains (la clase AppDomain)AppDomain)
Principales elementos de interfaz:Principales elementos de interfaz: Atributos:Atributos:
FriendlyNameFriendlyName BaseDirectoryBaseDirectory SetupInformation (Retorna un AppDomainSetup)SetupInformation (Retorna un AppDomainSetup)
AppDomains (la clase AppDomains (la clase AppDomain)AppDomain)
Principales elementos de intefaz:Principales elementos de intefaz: Métodos:Métodos:
CreateDomainCreateDomain UnloadUnload GetCurrentThreadIdGetCurrentThreadId GetAssembliesGetAssemblies ExecuteAssemblyExecuteAssembly CreateInstanceCreateInstance
AppDomains (la clase AppDomains (la clase AppDomain)AppDomain)
Principales elementos de interfaz:Principales elementos de interfaz: Sucesos:Sucesos:
AssemblyLoadAssemblyLoad AssemblyResolveAssemblyResolve TypeResolveTypeResolve DomainUnloadDomainUnload UnhandledExceptionUnhandledException
FINFIN
¿Preguntas?¿Preguntas?