Está en la página 1de 32

Ensamblados y

AppDomains
UAI – Facultad de Tecnología Informática
Ingeniería en sistemas informáticos
Lenguajes de Última Generación
Ensamblado (concepto)
1/+ Módulos administrados = 1 Assembly
(para el .NET Framework)

Concepto físico: “Colección de uno o más


módulos ejecutables o no”

Concepto lógico: “Menor unidad de


software reutilizable y susceptible de ser
implementado con control de versiones”
Módulos (elementos)
Encabezado PE (Portable
Excecutable)

Encabezado de archivo de .NET


Framework

Metadatos

MSIL
Módulos (elementos)
Encabezado PE y de .NET

Común en todos los ejecutables de


windows

Diferencia en Ensablados: Contiene JMP a


puntos de entrada _CorExeMain o
_CorDllMain de MsCorEE (RunTime de .NET)

Se carga Assembly en memoria (si no


estaba ya) y acciona el JIT
Módulos (elementos)
Metadatos

Definición de tipos internos y tipos


referidos y vinculados

Inseparables del módulo y viceversa

Principales funciones: Código


administrado seguro, y Reflection
Módulos (elementos)
MSIL

Código intermedio

Portable

Optimizable por el compilador a


código nativo para la plataforma de
ejecución
Ensamblados (elementos)
Manifiesto

Metadata

MSIL

Recursos
Ensamblados (elementos)
Manifiesto

Asimilado a metadatos (los incluye)

Información de Versionado, Nombre,


Compañía, Firma digital, Plataformas
compatibles, etc

Información principal de tipos


(incluyendo módulos internos)
Ensamblados (elementos)
Metadata

Definición de tipos internos y


tipos referidos y vinculados

Principales funciones: Código


administrado seguro, y Reflection
Ensamblados (elementos)
MSIL

Código portable y compilable


por el JIT a código nativo
Ensamblados (elementos)
Recursos

Elemento no ejecutable

Imágenes, cadenas de texto,


íconos, etc.

Opcional
Ensamblados (elementos)
Ensamblado de un solo archivo

MiEnsamblado.dll

Manifiesto
Metadatos
MSIL
Recursos
Ensamblados (elementos)
Ensamblado de más de un archivo

MiEnsamblado.dll Manifiesto (del módulo)


Metadatos
Manifiesto MSIL
Metadatos
MSIL
Recursos
Manifiesto (del módulo)
Metadatos
MSIL
Ensamblados
Privados: Se instalan con la
aplicación

Públicos: Compartidos entre


aplicaciones. Se instalan en el
GAC
Ensamblados
Ensamblados públicos y privados.
Diferencias.
Públicos permiten control de
versiones. Pueden coexistir distintas.
Públicos tienen administración más
profunda de seguridad.
Públicos solo levantan una instancia
para las aplicaciones.
Públicos pueden ser firmados.
Ensamblados
Nombres seguros
Evita conflictos de ensamblados públicos
Utilidad SN (generación de firma para
ensamblados)
Archivos .snk (claves pública y privada)
Firma parcial y demorada (delaysign).
Archivo .key

[assembly:AssemblyKeyFileAttribute("myKey.snk")]
[assembly:AssemblyDelaySignAttribute(true)]
Ensamblados
Enlace en tiempo de ejecución
(elementos)
Nombre

Versión (solo públicos)

Referencia cultural

Clave pública (solo públicos)


Ensamblados
Enlace en tiempo de ejecución
(pasos)
1. Verificación de directiva de versión en
archivos de configuración
2. Utilización del ensamblado (si se cargó
antes)
3. Búsqueda en el GAC
4. Búsqueda según sugerencias de código
base
5. Búsqueda en el árbol directorio de la
aplicación
Ensamblados
Enlace en tiempo de ejecución
(Directivas de versión)
Archivos de configuración:
 De aplicación
(nombreaplicacion.exe.config)
 De fabricante (para GAC)
 De equipo
(\Windows\Microsoft.NET\Framework\[versión
del framework]\Config\machine.config)
Ensamblados
Enlace en tiempo de ejecución
(Directivas de versión)
<configuration>
<runtime>
<assemblyBinding xmlns:”[URI]”>
<dependentAssembly>
<assemblyIdentity name=“MiAssembly”
publicKeyToken=“xxxxx” culture=“es-ar”/>
<bindingRedirect oldVersion=“x.x.x”
newVersion=“x.x.y”/>
<publisherPolicyApply=“no”/>
<codeBase version=“xx.x.x” href=“http://xx.com/x.dl”l/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Ensamblados
Enlace en tiempo de ejecución
(Ensamblados cargados previamente)

Verifica si el ensamblado se ha cargado


previamente en caché (por esta aplicación
u otra)

Se identifica con nombre seguro


Ensamblados
Enlace en tiempo de ejecución
(Búsqueda en el GAC)
Verifica si el ensamblado se encuentra en
el GAC (si se trata de un ensamblado
público)

Se identifica con nombre seguro


Ensamblados
Enlace en tiempo de ejecución
(Sugerencias de código base)

Definidas en archivos de configuración

Desactivan el “Sondeo”

Muy útil si se descargan ensamblados de


Internet
Ensamblados
Enlace en tiempo de ejecución
(Sondeo)

Búsqueda en el directorio de la aplicación


o subdirectorios

Búsqueda heurística empleando algunos


elementos del nombre seguro + ruta
binaria (definida opcionalmente en
archivos de configuración)
Ensamblados
Herramientas de línea de comandos

Compliladores (vbc, csc, jsc ,etc)


Vinculador de ensamblados (AL)
Utilidad de nombre seguro (NS)
Utilidad de GAC (GACUTIL)
Desensamblador MSIL (ILDASM)
Compilador a nativo (NGEN)
AppDomains
Concepto: “Es una aplicación administrada de
forma lógica que se ejecuta dentro de un
proceso físico ”

AppDomain A AppDomain C

AppDomain B AppDomain D

Proceso 1 del SO Proceso 2 del SO


AppDomains
Las aplicaciones pueden comunicarse
entre distintos AppDomains y Procesos

AppDomain A AppDomain C

AppDomain D
AppDomain B

Proceso 1 del SO Proceso 2 del SO


AppDomains

Puede haber distintas instancias


de una misma aplicación
ejecutándose en el mismo
proceso de Windows en diferentes
AppDomains
AppDomains (la clase
AppDomain)
Principales elementos de interfaz:
Atributos:
 FriendlyName
 BaseDirectory

 SetupInformation (Retorna un AppDomainSetup)


AppDomains (la clase
AppDomain)
Principales elementos de su interfaz:
Métodos:
 CreateDomain
 Unload

 GetCurrentThreadId

 GetAssemblies

 ExecuteAssembly

 CreateInstance
AppDomains (la clase
AppDomain)
Principales elementos de interfaz:
Sucesos:
 AssemblyLoad
 AssemblyResolve

 TypeResolve

 DomainUnload

 UnhandledException
FIN

¿Preguntas?

También podría gustarte