Strong naming y error al compilar en VS2010 y Team City

En el Visual 2008, cuando le agregábamos un strong name a una assembly, cuando queríamos compilar en otra máquina, al compilar nos pedía el password del archivo .pfx y luego seguía compilando.

Al pasar a Visual 2010, todo siguió funcionando perfecto. Pero cuando agregamos una nueva assembly y le agregamos su .pfx, al compilar en otra máquina, no nos pidió el password y además falló la compilación, con el siguiente mensaje (suprimo el número de key file):

Cannot import the following key file: nombreArchivoPFX.pfx. The key file may be password protected.
To correct this, try to import the certificate again or manually install the certificate to the
Strong Name CSP with the following key container name: VS_KEY_xxxxxxxxxxxxxxxx

En primer lugar, para arreglar esto en nuestro Visual Studio (y los de nuestros colegas), hay que ir a las propiedades del proyecto, a la sección Signing. Donde referenciamos al .pfx, clickear el combo, darle a Browse y seleccionar el mismo archivo. Cuando hagamos eso, al Visual le caerá la ficha (tarde) de que debe pedirnos el password. Lo ingresamos, compilamos de nuevo y todo joya. Sí, es un bug del VS2010 y ya está reportado, supuestamente Mocosoft lo está arreglando...

¿Y qué pasa si no compilamos con el Visual, sino con un servidor de Integración Continua? Bueno, tenemos que hacer lo que nos dice el mensaje de error: importar el certificado a mano. Esto se hace con el programa de línea de comando sn.exe, el mismo que usamos para registrar los strong names. La sintaxis es:

sn -i archivoPfx.pfx VS_KEY_xxxxxxxxxxxxxxxx

Donde reemplazamos con los valores que nos tiró el mensaje de error. Cabe aclarar que el programa sn.exe está en "Program Files\Microsoft SDKs\Windows\Bin" o donde hayas instalado el SDK de Windows.

En el caso del servidor de integración Team City, la cosa es un poco más sutil. Por defecto, el agente de Team City (el servicio que compila nuestros proyectos) corre en la cuenta SYSTEM, que por si no lo saben tiene incluso más derechos que una cuenta de Administrador. A menos que hayamos configurado durante la instalación que el Team City corra en otra cuenta, tenemos que abrir una consola con la cuenta SYSTEM para ejecutar el comando de arriba.

¿Y cómo abrimos una consola bajo la cuenta SYSTEM? Simple, nos bajamos las PSTools, y ponemos su contenido en C:\Windows o algún otro lugar puesto en la variable PATH (para poder ejecutarlos desde cualquier lado). Hecho eso, abrimos una consola como Administrador y tipeamos:

psexec -i -s cmd.exe

Y voilá, ya tenemos una consola como SYSTEM. Ahora sólo resta correr sn.exe con los valores apropiados.

Comments

Popular posts from this blog

VB.NET: Raise base class events from a derived class

Apache Kafka - I - High level architecture and concepts

Upgrading Lodash from 3.x to 4.x