Академический Документы
Профессиональный Документы
Культура Документы
NET
Nivel: Intermedio
por José Manuel Alarcón Aguín, www.jasoft.org
Las preguntas habituales dentro de esta temática suelen ser: ¿dónde debo colocar los
ensamblados que uso en mis aplicaciones? ¿Y cómo hago si quiero compartirlos entre varias
aplicaciones?
En este documento explicaré los tipos de ensamblados que tenemos en .NET, cómo el motor
de tiempo de ejecución de la plataforma busca los diferentes ensamblados que usan nuestras
aplicaciones, y cómo podemos incluir referencias a ensamblados de la GAC desde Visual
Studio. Finalmente, como apéndice, explicaré un truco para poder ver ensamblados propios en
el diálogo de agregar referencia de Visual Studio.
Los ensamblados compartidos se generan con la utilidad de línea de comandos sn.exe, o bien
desde el propio IDE de Visual Studio especificando los valores en la pestaña “Firma”, en las
propiedades de un proyecto de biblioteca de clases:
Figura 1.- Pestaña de propiedades de firma en un proyecto .NET
Para la firma se utiliza un algoritmo de clave pública, por lo que necesitamos disponer de una
pareja de claves pública-privada para el proceso. Podemos reutilizar una pareja de claves que
ya tengamos para todos los proyectos (recomendable) o bien generar una nueva usando la
lista desplegable que se ve en la figura anterior.
Estos ensamblados compartidos los podemos agregar a la GAC (Global Assembly Cache) del
sistema si queremos que puedan ser localizados y utilizados por todas las aplicaciones que
tengamos instaladas, si bien sólo se recomienda con bibliotecas de funciones que realmente se
reutilicen mucho.
Figura 3.- Manifiesto de un ensamblado con diversas referencias a ensamblados compartidos del sistema
Es decir, se buscan primero las DLL y luego los EXE, y primero se intentan localizar dentro de la
carpeta actual, y sino dentro de carpetas con el nombre del ensamblado, para finalmente
probar dentro de las carpetas sugeridas en el .config (en caso de haberlas).
Si el ensamblado referenciado está atado a una cultura específica, las rutas cambian
ligeramente para reflejar este hecho y poder localizar el correcto según la cultura empleada:
CarpetaBase\Cultura\NombreEnsamblado.dll
CarpetaBase\Cultura\NombreEnsamblado\NombreEnsamblado.dll
CarpetaBase\Ruta1\Cultura\NombreEnsamblado.dll
CarpetaBase\Ruta1\Cultura\NombreEnsamblado\NombreEnsamblado.dll
CarpetaBase\Ruta2\Cultura\NombreEnsamblado.dll
CarpetaBase\Ruta2\Cultura\NombreEnsamblado\NombreEnsamblado.dll]
CarpetaBase\Cultura\NombreEnsamblado.exe
CarpetaBase\Cultura\NombreEnsamblado\NombreEnsamblado.exe
CarpetaBase\Ruta1\Cultura\NombreEnsamblado.exe
CarpetaBase\Ruta1\Cultura\NombreEnsamblado\NombreEnsamblado.exe
CarpetaBase\Ruta2\Cultura\NombreEnsamblado.exe
CarpetaBase\Ruta2\Cultura\NombreEnsamblado\NombreEnsamblado.exe
Es decir, es casi idéntico pero siempre incluyendo el nombre de la cultura delante (por
ejemplo, “es-ES”, “en-UK” o simplemente “es” o “en”.
Con esto resulta fácil saber en qué rutas debemos colocar nuestros ensamblados para que el
runtime de .NET los pueda localizar.
1.- Antes de nada se busca el ensamblado en la GAC del sistema. Si el ensamblado está
registrado ahí entonces ya se carga desde la ruta definida en éste y se termina la
búsqueda.
Si en la configuración hay una línea como esta para el ensamblado que nos interesa,
entonces se carga desde ahí y se termina el proceso.
¿Cómo sabe el runtime que el ensamblado es uno compartido y por lo tanto que debe usar
este procedimiento? Muy sencillo: porque en el manifiesto se almacena el nombre completo
del ensamblado (ver figura 3), el cual incluye la clave pública de firma del mismo. Además
gracias a esta se puede comprobar la identidad del ensamblado antes de proceder a cargarlo.
El motivo es que Visual Studio utiliza unas rutas concretas para llenar esa pestaña del diálogo,
no la lista que hay en la GAC como parece a simple vista. Esas rutas, por defecto, coinciden con
las que contienen las DLLs del framework, que son en general las mismas que están en el GAC,
de ahí que pueda creerse que son listas idénticas cuando no es así.
Entonces, si tengo una DLL propia en el GAC y no va a aparecer en esta lista, ¿cómo añado una
referencia a la misma en mi aplicación?
La respuesta es que si tú tienes un ensamblado firmado sólo debes añadir una referencia al
mismo directamente desde Visual Studio, como si de un ensamblado normal se tratara. A
mayores lo seleccionas, pulsas F4 para ir a sus propiedades, y marcas la opción de no copiarlo
localmente.
Esto indica que éste no se debe copiar junto con el proyecto. Más tarde, en tiempo de
ejecución, cuando el runtime busque el ensamblado en cuestión, dado que es un ensamblado
compartido (está firmado), al primer sitio al que irá a buscarlo es al GAC, así que lo usará desde
allí como queríamos si lo hemos añadido previamente. Repasa el apartado anterior y lo verás
claro.
6.- TRUCO: Añadir una DLL propia al diálogo de añadir referencia .NET
Para terminar voy a explicar cómo podemos hacer que una de nuestras DLL compartidas, que
está en el GAC o no, aparezca directamente en el diálogo de añadir referencia, dentro de la
pestaña .NET de la figura 4.
que son, respectivamente, donde buscará elementos para todos los usuarios y para un usuario
concreto a mayores. La segunda rama seguramente ni siquiera existe en tu equipo, ya que por
defecto no hay nada especial por usuario, claro.
Si quieres que un ensamblado propio aparezca ahí tendrás que introducir en el registro, en
alguna de estas ramas, un valor personalizado. Así que creas una sub-rama nueva con el
nombre descriptivo que quieras y dentro de ésta, en su valor por defecto, le pones la ruta
física de la carpeta que contiene a tus ensamblados.
De todos modos esto no tiene mucha utilidad dada la forma que tiene el sistema de buscar
ensamblados, según hemos visto. Simplemente te resultará algo más cómodo añadir la
referencia, pero nada más.
Acerca de campusMVP
CampusMVP te ofrece la mejor formación en tecnología Microsoft a través de nuestros cursos online y
nuestros libros especializados, impartidos y escritos por conocidos MVP de Microsoft. Visita nuestra
página y prueba nuestros cursos y libros gratuitamente. www-campusmvp.com