tfs build continuous-integration code-signing delay-sign

tfs - La creación de Team Foundation Server con códigos protegidos por contraseña falla



build continuous-integration (1)

Estoy intentando configurar una compilación de integración continua en TFS 2008. En el proyecto que quiero compilar, uso una clave para firmar. Esta clave utiliza una contraseña. No puedo hacer que se compile, porque durante la compilación TFS quiere mostrar un cuadro de diálogo que no se puede mostrar. Creo que necesito compilar el proyecto a mano en el servidor, pero solo el explorador TFS y las partes de compilación están instaladas en el servidor. ¿Alguna sugerencia sobre cómo hacer que mi proyecto se construya correctamente?

Este es el error dado por TFS:

C: / WINDOWS / Microsoft.NET / Framework / v3.5 / Microsoft.Common.targets (1805,7): error MSB4018: La tarea "ResolveKeySource" falló inesperadamente. System.InvalidOperationException: mostrar un cuadro de diálogo modal o un formulario cuando la aplicación no se está ejecutando en el modo UserInteractive no es una operación válida. Especifique el estilo ServiceNotification o DefaultDesktopOnly para mostrar una notificación de una aplicación de servicio. at System.Windows.Forms.Form.ShowDialog (propietario de IWin32Window) en System.Windows.Forms.Form.ShowDialog () en Microsoft.Build.Tasks.ResolveKeySource.ResolveAssemblyKey () en Microsoft.Build.Tasks.ResolveKeyource


Esta publicación de blog a continuación detalla los pasos exactos

Archivos clave de configuración

Cree un par de claves privadas / públicas protegidas por contraseña (KeyPair.pfx) usando la pestaña "Firma" de Visual Studio dentro de las propiedades de un proyecto. Extraiga la clave pública del par de claves y cópiela en un archivo separado (Key.snk) sn.exe -p KeyPair.pfx Key.snk

Copie KeyPair.pfx a su servidor de compilación. Uso C: / Archivos de programa / MSBuild / KeyFile.pfx, ya que se puede acceder a él mediante la propiedad $ (MSBuildExtensionsPath) MSBuild. Mueva el archivo KeyPair.pfx a una ubicación segura. Mantenga la contraseña en secreto también. Copie Key.snk en una ubicación compartida donde sus desarrolladores puedan acceder a ella. Configuración de proyectos para la firma

Para cada conjunto que desee firmar:

  1. Abra las propiedades del proyecto | Página de firma
  2. Seleccione la casilla de verificación [X] Firmar el conjunto.
  3. Seleccione la casilla de verificación [X] Delay sign only.
  4. Seleccione desde el menú desplegable clave.
  5. Vaya a la ubicación compartida y seleccione el archivo Key.snk
  6. El archivo snk se copiará en cada directorio de proyecto al que lo asigne
  7. Copie el archivo de clave de uno de sus proyectos en los Elementos de solución para que pueda usarlo para la configuración de ejecución de prueba

Configuración de ejecución de prueba de configuración para volver a firmar

Si desea instrumentar sus ensamblajes y habilitar la cobertura de código para sus pruebas de unidad, entonces necesita especificar un archivo de clave para volver a firmar.

Abra el archivo LocalTestRun.testrunconfig En la pestaña Cobertura de código, seleccione la clave como el archivo de clave de re-firma

Deshabilitar la verificación de nombre seguro en estaciones de trabajo de desarrollador

Debido a que está firmando con demora solo con la clave pública, la verificación del ensamblado .NET CLR fallará con los ensamblados construidos localmente. Cuando la verificación falla, no podrá ejecutar o depurar los ensamblajes.

Para superar esto en desarrollo, debe deshabilitar la verificación de nombre seguro para los ensamblajes que construya localmente y firmar con demora con su clave pública.

Abra un tipo de línea de comandos de Visual Studio: sn.exe -tp Key.snk

Esto dará salida a algunos datos incluyendo el token.

Escriba: sn -Vr *,YOUR_KEY_TOKEN

ejemplo: sn -Vr *,0123456789abcdef

Esto deshabilitará la verificación de nombre seguro para todos los ensamblajes firmados con su clave pública. Puede enumerar las configuraciones actuales para la verificación de nombre seguro con: sn -Vl

Instalación de la clave privada para la creación de equipos

Dado que la clave privada (Key.pfx) está protegida por contraseña, Team Build no puede acceder a ella. Gracias al Blog de Nagaraju Palla: Uso de claves de firma protegidas por contraseña en Team Build , tenemos una solución.

Inicie sesión en el servidor de Team Build como la cuenta de servicio de compilación Abra el proyecto en Visual Studio Genere el proyecto en Visual Studio Se le pedirá la contraseña para el archivo de clave privada. Ingrese la contraseña Cierre Visual Studio y cierre la sesión El archivo de clave privada ahora está instalado en el almacén de certificados local de la cuenta del servicio de compilación y Team Build puede acceder a él sin solicitar la contraseña nuevamente. Este almacén de certificados es tan seguro como la contraseña de la cuenta del servicio de compilación. (Sugerencia: haga que sea tan fuerte como la contraseña de su archivo de claves)

Actualizando TFSBuild.proj Build Script

Team Build tiene acceso al archivo de clave privado y la contraseña. Esto le permite firmar completamente los ensamblajes.

Para anular la configuración del proyecto e instruir a Team Build para que use el archivo de claves privado y deshabilite la firma parcial, debemos configurar la propiedad CustomPropertiesForBuild en TFSBuild.proj

Revise su secuencia de comandos de compilación de TFSBuild.proj Busque la propiedad de marcador de posición (cerca de la línea 130 de manera predeterminada) Reemplácelo con lo siguiente: SignAssembly = true; DelaySign = false; AssemblyOriginatorKeyFile = $ (MSBuildExtensionsPath) / Key.pfx Check-in sus cambios Poner en cola una compilación Verificación de la salida de la compilación en equipo

Para verificar que Team Build ha nombrado correctamente sus ensamblajes, puede usar la utilidad sn.exe para verificar la firma del nombre seguro.

Abra un tipo de línea de comandos de Visual Studio: sn.exe -vf assemblyname.dll

También puedes verificar todos tus ensamblajes al mismo tiempo:

Abra un tipo de línea de comandos de Visual Studio: FOR% a IN (* .dll) DO sn.exe -vf% a