Añadir dlls en la GAC de las máquinas de Windows Azure

Una de las opciones más sencillas para acondicionar las máquinas en Windows Azure es configurar un startup con los instalables necesarios para frameworks y complementos que utilizamos dentro de nuestra aplicación. La parte negativa de este sistema es que, si necesitamos instalar varios paquetes con el fin de tener varias librerías ubicadas en la GAC de Windows Azure es que  la subida se hace cada vez más lenta debido al peso de cada uno de los instalables.

Si conocemos cuáles son las librerías que necesitamos para que nuestra aplicación funcione correctamente en un entorno que no sea de desarrollo, podemos seguir los siguientes pasos para instalar dichas dll en la GAC sin tener que utilizar un paquete de instalación 🙂

En este post vamos a añadir dos librerías a través de un startup. Lo primero que necesitamos localizar es la herramienta gacutil.exe. Esta herramienta nos permitirá realizar la instalación de las dll a través de un bat que utilizaremos como startup. La misma se encuentra en %programfiles%Microsoft SDKsWindowsv7.0ABinNETFX 4.0 Tools y debemos añadir dentro de nuestra solución tanto el archivo gacutil.exe como gacutil.exe.config. Ambos archivos deben tener la propiedad Copy Local a True para que sean incluidos dentro del paquete de subida a Windows Azure. Del mismo modo, las DLL que queramos añadir en la GAC deberán tener este mismo atributo a true para asegurarnos que están dentro de la carpeta bin que se incluirá en la subida.

Una vez establecidos estos pasos, debemos crear un .bat con la siguiente información:

%~dp0gacutil.exe /nologo /i %~dp0Microsoft.IdentityModel.dll
%~dp0gacutil.exe /nologo /i %~dp0EntityFramework.dll
exit /b 0

Lo que estamos haciendo en el mismo es invocar a la herramienta gacutil.exe (el prefijo ~dp0 se utiliza para indicar que ese ejecutable o dll está en la misma carpeta donde se encuentra el .bat que estamos ejecutando) para que se añadan las librerías indicadas en la misma línea a la GAC de la máquina virtual que se está configurando.

Definimos el la tarea dentro del apartado startup del archivo ServiceDefinition.csdef y, del mismo modo, ponemos el atributo Copy Local a True para que sea parte de la subida.

 <WebRole name="Web" vmsize="Small">
    <Startup>
      <Task commandLine="RegisterGAC.bat" executionContext="elevated"></Task>
    </Startup>
    <Sites>

De este modo seremos capaces de añadir dichas librerías sin la necesidad de subir los paquetes de instalación y que la subida sea mucho más liviana.

Espero que sea de utilidad 😀

¡Saludos!