Ensamblados y AppDomains

33
Ensamblados y Ensamblados y AppDomains AppDomains Cap. 14 – Balena Cap. 14 – Balena UAI – Facultad de Tecnología UAI – Facultad de Tecnología Informática Informática Ingeniería en sistemas Ingeniería en sistemas informáticos informáticos Programación Orientada a Objetos Programación Orientada a Objetos 2007 2007

Transcript of Ensamblados y AppDomains

Page 1: Ensamblados y AppDomains

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

Page 2: Ensamblados y AppDomains

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”

Page 3: Ensamblados y AppDomains

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

Page 4: Ensamblados y AppDomains

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

Page 5: Ensamblados y AppDomains

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

Page 6: Ensamblados y AppDomains

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

Page 7: Ensamblados y AppDomains

Ensamblados (elementos)Ensamblados (elementos)

ManifiestoManifiesto

MetadataMetadata

MSILMSIL

RecursosRecursos

Page 8: Ensamblados y AppDomains

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)

Page 9: Ensamblados y AppDomains

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

Page 10: Ensamblados y AppDomains

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

Page 11: Ensamblados y AppDomains

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

Page 12: Ensamblados y AppDomains

Ensamblados (elementos)Ensamblados (elementos)

Manifiesto

Metadatos

MSIL

Recursos

Ensamblado de un solo archivoEnsamblado de un solo archivo

MiEnsamblado.dllMiEnsamblado.dll

Page 13: Ensamblados y AppDomains

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

Page 14: Ensamblados y AppDomains

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

Page 15: Ensamblados y AppDomains

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.

Page 16: Ensamblados y AppDomains

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

Page 17: Ensamblados y AppDomains

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)

Page 18: Ensamblados y AppDomains

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

Page 19: Ensamblados y AppDomains

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))

Page 20: Ensamblados y AppDomains

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>

Page 21: Ensamblados y AppDomains

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

Page 22: Ensamblados y AppDomains

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

Page 23: Ensamblados y AppDomains

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

Page 24: Ensamblados y AppDomains

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)

Page 25: Ensamblados y AppDomains

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

Page 26: Ensamblados y AppDomains

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)

Page 27: Ensamblados y AppDomains

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

Page 28: Ensamblados y AppDomains

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

Page 29: Ensamblados y AppDomains

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

Page 30: Ensamblados y 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)

Page 31: Ensamblados y AppDomains

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

Page 32: Ensamblados y AppDomains

AppDomains (la clase AppDomains (la clase AppDomain)AppDomain)

Principales elementos de interfaz:Principales elementos de interfaz: Sucesos:Sucesos:

AssemblyLoadAssemblyLoad AssemblyResolveAssemblyResolve TypeResolveTypeResolve DomainUnloadDomainUnload UnhandledExceptionUnhandledException

Page 33: Ensamblados y AppDomains

FINFIN

¿Preguntas?¿Preguntas?