"No se puede encontrar el certificado de firma de manifiesto en el almacén de certificados", incluso cuando se agrega una nueva clave

153

No puedo crear proyectos con una firma de clave de nombre fuerte: el mensaje en el título siempre aparece.

Sí, el proyecto se copió inicialmente desde otra máquina. Sin embargo, incluso si agrego una nueva clave a través de la pestaña Firma en Propiedades del proyecto, este error aún se muestra.

He intentado ejecutar Visual Studio como administrador y he intentado agregar manualmente las claves al almacén de certificados de Windows.

¡Ayuda!

Editar: No obtengo este error con un nuevo proyecto, pero me gustaría que este proyecto existente funcione. ¡No funcionará incluso si creo un nuevo certificado!

Marcus
fuente
3
¿Qué tipo de proyecto VS? ¿Ha desmarcado también la opción "Firmar los manifiestos de ClickOnce" en la pestaña de firma de propiedades del proyecto?
Simon Mourier
@ Simon Mourier, si desactivo esa opción, el archivo no se firmará. ¡Quiero que se firme! Es un proyecto de C #. Funciona bien en mi máquina de desarrollo principal, pero no en la computadora portátil.
Marcus
¿Aparece el mensaje de error en su registro de compilación o de alguna otra manera? Puede ayudar si copia y pega el registro.
Owen Wengerd
Un error en el registro de compilación: "No se puede encontrar el certificado de firma de manifiesto en el almacén de certificados"
Marcus
No vi las líneas de código en la respuesta aceptada. Pero esto funcionó para mí: creé una nueva clave en VS2015. Deslicé Firmar la Asamblea y guardé. Luego hice clic en el botón Seleccionar del archivo, elegí el archivo que acababa de crear, volví a hacer clic en Firmar el ensamblaje y lo guardé. Reconstruido.
Tim

Respuestas:

234

Finalmente encontré la solución y realmente espero que esto ayude a alguien más.

  1. Edite el .csprojarchivo para el proyecto en cuestión.
  2. Elimine las siguientes líneas de código:

    <PropertyGroup>
       <ManifestCertificateThumbprint>...........</ManifestCertificateThumbprint>
    </PropertyGroup>
    <PropertyGroup>
       <ManifestKeyFile>xxxxxxxx.pfx</ManifestKeyFile>
    </PropertyGroup>
    <PropertyGroup>
       <GenerateManifests>true</GenerateManifests>
    </PropertyGroup>
    <PropertyGroup>
       <SignManifests>false</SignManifests>
    </PropertyGroup>
    
Marcus
fuente
1
A mí también me funcionó. ¿Alguna advertencia de tal acción?
Doctor Coder
1
Sí, eliminé cualquier cosa con "Manifiesto" y funcionó :-)
s1cart3r
2
No haría esto sin conocer las repercusiones ... lo hace de todos modos
barnacle.m
En mi caso, eliminar ManifestCertificateThumbprinty ManifestKeyFileresolver el problema.
Ahmed Shamel
Trabajó para mi. No tengo idea de las repercusiones que esto tiene, pero al menos uno de ellos es un proyecto en funcionamiento, así que eso es lo suficientemente bueno para mí.
Parrotmaster
148

Vaya a las "Propiedades" de su proyecto en Visual Studio. Luego vaya a la pestaña de firma.

Luego, asegúrese de que Firmar el manifiesto de clic una vez esté desactivado.


Instrucciones actualizadas:

Dentro de su Explorador de soluciones:

  1. haga clic derecho en su proyecto
  2. haga clic en propiedades
  3. generalmente en el lado izquierdo, seleccione la pestaña "Firma"
  4. marque el signo que manifiesta ClickOnce
  5. ¡Asegúrate de ahorrar!

ingrese la descripción de la imagen aquí

ADL
fuente
2
Lo que dijiste está bien y debería funcionar pero no funcionó. Al final tuve que eliminar las líneas de código como se menciona en la respuesta a continuación
Hamid Shahid
1
¿Qué hace esto / qué significa esta acción?
LazerSharks
@TrailMix Modificará su archivo de configuración adecuadamente.
ADL
1
esto me dio una solución para vs2010 :) arriba!
jace
1
¡Buena respuesta! Estoy usando VS2012 y realmente funciona! +1
kiLLua
15

¡¡Es sencillo!!

Resolví este problema siguiendo estos pasos:

  1. Abrir propiedades del proyecto img
  2. Haga clic en la pestaña de firma
  3. Y desmarque "Firmar la asamblea"

¡¡Eso es!!

Amit Kadam
fuente
13
  1. Abra el archivo .csproj en el Bloc de notas.
  2. Elimine la siguiente información relacionada con la firma del certificado en el almacén de certificados

    <PropertyGroup>
      <ManifestCertificateThumbprint>xxxxx xxxxxx</ManifestCertificateThumbprint>
      <ManifestKeyFile>xxxxxxxx.pfx</ManifestKeyFile>
    <GenerateManifests>true</GenerateManifests>
    <SignManifests>false</SignManifests>
    </PropertyGroup>
    
Rajamohan Rajendran
fuente
11

Pruebe esto: haga clic con el botón derecho en su proyecto -> Vaya a propiedades -> Haga clic en la firma que se encuentra en el lado izquierdo de la pantalla -> Desactive la casilla Firmar el clic una vez que se manifiesta -> Guardar y compilar

Kamala Hanchinal
fuente
6

Vaya a sus proyectos "Propiedades" en Visual Studio. Luego vaya a la pestaña de firma.

Luego, asegúrese de que Firmar el manifiesto de clic una vez esté desactivado.

O

1.Abra el archivo .csproj en el Bloc de notas.

2. Elimine la siguiente información relacionada con la firma del certificado en el almacén de certificados xxxxx xxxxxx xxxxxxxx.pfx verdadero falso `

Trabajó para mi.

Ceniza
fuente
3

Suponiendo que se trata de un certificado personal creado por Windows en el sistema desde el que copió su proyecto, puede usar el administrador de certificados en el sistema donde está el proyecto ahora e importar el certificado. Inicie el administrador de certificados (certmgr) y seleccione los certificados personales, luego haga clic derecho debajo de la lista de certificados existentes y seleccione importar de las tareas. Use el buscador para encontrar el .pfx en el proyecto (el .pfx del sistema anterior que copió con el proyecto). Debe estar en el subdirectorio con el mismo nombre que el directorio del proyecto. Estoy familiarizado con C # y VS, por lo que si ese no es su entorno, tal vez el .pfx esté en otro lugar o tal vez esta sugerencia no se aplique. Después de la importación, debería recibir un mensaje de estado. Si tuvo éxito, el error de compilación del certificado debería desaparecer.pantalla certmgr

dpminusa
fuente
¡Claro y conciso!
Guido Leenders
0

No es suficiente agregar claves manualmente al almacén de certificados de Windows. El certificado solo contiene la clave pública firmada. También debe importar la clave privada asociada con la clave pública en el certificado. Un archivo .pfx contiene claves públicas y privadas en un solo archivo. Eso es lo que necesitas importar.

Owen Wengerd
fuente
Gracias pero ya lo intenté. Visual Studio debería agregar automáticamente el certificado cuando cree uno nuevo de todos modos. Sin embargo, también he intentado agregar el archivo .pfx manualmente. Dejé ventanas para instalarlo en el almacén de certificados correcto y también lo agregué a mi tienda personal.
Marcus
La clave privada no se almacena en el almacén de certificados. Lea esto, tal vez le ayude a comprender la distinción: technet.microsoft.com/en-us/library/cc962112.aspx
Owen Wengerd
Debo agregar que puede verificar que la clave privada asociada esté disponible abriendo la ventana de propiedades del certificado en el administrador de certificados. Si la clave privada está disponible, se muestra el siguiente texto en la parte inferior de la página General: "Tiene una clave privada que corresponde a este certificado". Si no ve ese texto, la clave privada no está instalada.
Owen Wengerd
Sí, dice "Tiene una clave privada que corresponde a este certificado".
Marcus
Creo que eso descarta la clave o el certificado como el problema.
Owen Wengerd
0

Dijiste que copiaste archivos de otra computadora. Después de copiarlos, ¿los 'desbloqueó'? Específicamente, el archivo .snk debe verificarse para asegurarse de que no esté marcado como inseguro.

Owen Wengerd
fuente
No está bloqueado, vino del software de sincronización Windows Live Mesh. Sin embargo, es irrelevante ya que incluso crear una nueva clave dentro de Visual Studio en la computadora portátil no funcionará.
Marcus
0

Para firmar un ensamblado con un nombre seguro utilizando atributos

Abierto AssemblyInfo.cs(en$(SolutionDir)\Properties )

el AssemblyKeyFileAttributeo elAssemblyKeyNameAttribute , que especifica el nombre del archivo o contenedor que contiene el par de claves que se utilizará al firmar el ensamblado con un nombre seguro.

agregue el siguiente código:

[assembly:AssemblyKeyFileAttribute("keyfile.snk")]
QuangNHb
fuente
Agregar esta línea no hace la diferencia, sigo teniendo el mismo error.
Marcus
0

Si solo necesita construir el proyecto o la solución localmente , eliminar la firma podría ser una solución simple como sugieren otros.

Pero si tiene este error en su servidor de compilación de automatización como TeamCity donde construye sus piezas de lanzamiento reales para su implementación o distribución, es posible que desee considerar cómo puede instalar este certificado correctamente en la tienda de certificados en la máquina de compilación, para que obtenga paquetes firmados al final de la compilación.

En general, no se recomienda registrar / confirmar ningún PFX certificado en el control de origen, por lo que la forma de obtener estos archivos en su servidor de compilación durante el proceso de compilación es otra cuestión, pero a veces las personas tienen este archivo almacenado junto con la solución código, para que pueda encontrarlo en la carpeta del proyecto.

Todo lo que necesita hacer es instalar este certificado con la cuenta adecuada en su servidor de compilación.

  1. Descarga PsExec de Windows Sysinternals .

  2. Abra un símbolo del sistema e ingrese lo siguiente. Generará un nuevo símbolo del sistema, ejecutándose como Sistema local (suponiendo que su TeamCity se ejecute con la cuenta predeterminada del Sistema local):

    > psexec.exe -i -s cmd.exe

  3. En este nuevo símbolo del sistema, cambie al directorio que contiene el certificado e ingrese el nombre del archivo a instalar (cambie el nombre del archivo al suyo):

    > mykey.pfx

  4. Se iniciará el asistente de Importar certificado. Haga clic y seleccione todos los valores predeterminados sugeridos.

  5. Ejecute la compilación.

Todos los créditos van a Stuart Noble (y luego a Laurent Kempé , creo ☺).

Severo
fuente