2012-06-22 30 views
9

Estoy intentando crear un proyecto ClickOnce Windows Forms (.NET 3.5/Visual Studio 2010) en una computadora con Windows Server. (En un esfuerzo para automatizar el proceso de construcción con HudsonCI.)MSBuild no puede firmar un manifiesto ClickOnce con una clave temporal (errores MSB3326 y MSB3321)

Para firmar el manifiesto de ClickOnce que creó una clave temporal en Visual Studio, temp.pfx. Puedo construir e implementar con éxito el proyecto desde Visual Studio en mi estación de trabajo. Sin embargo, cuando se ejecuta en el servidor MSBuild me sale el siguiente mensaje de error:

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Microsoft.Common.targets (1970,9): error MSB3326: No se puede importar el siguiente archivo de clave:. El archivo de clave puede estar protegido con contraseña. Para corregir esto, trate de importar el certificado nuevamente o importe el certificado manualmente en el almacén de certificados personales del usuario actual. [C: .hudson \ jobs [...]. Csproj]

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Microsoft.Common.targets (1970,9): error MSB3321: clave de importación archivo "temp.pfx" fue cancelado. [C: \ .hudson empleos [...] csproj].

Probé todas las siguientes preguntas y respuestas sin suerte: pregunta

  • desbordamiento de pila Cannot import the keyfile 'blah.pfx' - error 'The keyfile may be password protected'

    => En mi caso, el mensaje de error no indica el nombre de un almacén de certificados, pero dice "el almacén de certificados personales del usuario actual".

    => Incluso cuando se trata de la respuesta aceptada con "personal" como el nombre del contenedor (sn -i temp.pfx personal), que no puede analizar la tecla:

    No se pudo analizar el PKCS # 12 blob en ALiS_TemporaryKey.pfx - - Se produjo un error interno o .

  • desbordamiento de pila pregunta Using MSBuild to sign ClickOnce or assembly results in error MSB3321

    => Probé la respuesta aceptada, pero el archivo de claves no se pueden importar porque "O el perfil de usuario no es accesible o la clave privada que está importando podría requerir un proveedor de servicios criptográficos que no esté instalado en su sistema "

    => Lo mismo ocurre si intento importar el archivo haciendo doble clic en él en el Explorador de Windows (sugerencia de RobinDotNet)

  • desbordamiento de pila pregunta Signing assemblies with PFX files in MSBuild, Team Build, and TFS

    => El PO de dicha cuestión no tuvo éxito con las dos respuestas anteriores, también, pero por desgracia ni siquiera las respuestas que él se me ayudaría:

    Inicie sesión como el usuario que ejecuta MSBuild en el equipo de creación, invoque manualmente MSBuild y escriba la contraseña cuando se le solicite.

    => Me conecté y ejecuté msbuild myproject.sln pero ni siquiera me pidió la contraseña.

    Lo que finalmente lo solucionó fue hacer que la cuenta bajo la cual el servicio TFS Build ejecute un administrador en la máquina local.

    => La cuenta que ejecuta Hudson (más precisamente: Tomcat) ya es un administrador local. Traté de ejecutar MSBuild desde una línea de comando "Ejecutar como administrador" incluso y aún recibiría los mismos mensajes de error.


Actualización: traté de abrir la solución en Visual Studio en el mismo servidor y construirlo. Me sale el mismo error. Cuando intento volver a importar el archivo PFX en la pestaña Firma de las propiedades del proyecto, me dice "contraseña no válida". Si trato de importar el mismo archivo en la misma solución en Visual Studio en mi estación de trabajo y proporciono la misma contraseña, se acepta.

Actualización 2: Si tomo una clave temporal de edad que había generado con Visual Studio     2008, que puede ser importado con éxito en el almacén de certificados de nuestro servidor; no se pueden importar claves temporales que creé recientemente con Visual Studio 2010.

Actualización 3: Pude crear una nueva "clave temporal" en Visual Studio en el servidor y usarla tanto en el servidor como en mi estación de trabajo para firmar el manifiesto ClickOnce. No puedo dar una explicación razonable: ambas computadoras son de 64 bits y estoy usando Visual Studio 2010 en ambas. Ambos tienen v3.5 y v4 (4.0.30319) .NET framework instalado. Mi estación de trabajo es Windows 7 Professional y el servidor es Windows Server 2008 R2 Standard.

Respuesta

6

Copie el archivo PFX en la máquina en la que está realizando las compilaciones. Haga doble clic en él e instálelo en el administrador de certificados en la máquina. Asegúrese de haber iniciado sesión en la cuenta utilizada para hacer las compilaciones.

Otras sugerencias/preguntas: ¿Tiene la versión correcta de .NET instalada en la máquina? ¿Tiene privilegios para escribir en el almacén de certificados en esa máquina?

Si abre el proyecto de Visual Studio, vaya a las propiedades del proyecto y trate de crear un nuevo certificado, ¿funciona? Debería crear un archivo PFX y agregarlo al proyecto. ¿Y puede verlo en el almacén de certificados (menú Inicio/certmgr.msc)?

+0

Eso da como resultado lo mismo que el segundo enfoque que mencioné :-( – chiccodoro

+0

Para ser sincero, no sé qué es "Hudson". ¿Tiene la versión correcta de .NET instalada en la máquina? También, haga ¿Tiene privilegios para escribir en la tienda de certificados en esa máquina? Si abre el proyecto de Visual Studio e ir a las propiedades del proyecto e intenta crear un nuevo certificado, ¿funciona? Debería crear un archivo pfx y agregarlo al proyecto. ¿Y puedes verlo en la tienda de certificados? (Start/certmgr.msc) – RobinDotNet

+0

He reformulado la pregunta, como para hacer que Hudson sea solo un detalle en una nota al margen. – chiccodoro

-1

Tuve el mismo problema, no pude importar en la máquina TFS. Resulta que tuve que exportarlo en la máquina del desarrollador (propiedades del proyecto, página de firmas, haga clic en más detalles) con más detalles -> detalles de la pestaña y luego simplemente exportar con una contraseña. Copie ese archivo exportado a TFS y use la misma contraseña: hecho

+0

Estos pasos son demasiado vagos para ser realmente útiles. –

0

Encontré que si crea un archivo temporal.pfx y deja la contraseña VACÍA, entonces funcionará bien en la máquina de compilación. No me di cuenta de que podía dejarlo vacío y la primera vez que falló como para OP. Creé un segundo temp.pfx sin contraseña y se creó en el servidor de compilación para mí.

+0

Sin embargo, un PFX sin una contraseña no es muy seguro :-) – chiccodoro

0

Tuve el mismo problema. Y lo solucionó instalando Windows SDK 7.1 para .net 4.0 en la máquina de compilación. PD Al principio hemos instalado SDK 8.0A, y la compilación funcionaba bien excepto para cantar. Parece que 7.1 actualiza algunos componentes en el sistema, por lo que pfx comienza a funcionar.

Cuestiones relacionadas