"Impossibile trovare il certificato di firma manifest nell'archivio certificati", anche quando si aggiunge una nuova chiave


154

Non riesco a creare progetti con una firma con un nome sicuro: il messaggio nel titolo viene sempre visualizzato.

Sì, il progetto è stato inizialmente copiato da un'altra macchina. Tuttavia, anche se aggiungo una nuova chiave tramite la scheda Firma in Proprietà progetto, questo errore viene comunque visualizzato.

Ho provato a eseguire Visual Studio come amministratore e ho provato ad aggiungere manualmente le chiavi all'archivio certificati di Windows.

Aiuto!

Modifica: non visualizzo questo errore con un nuovo progetto, ma mi piacerebbe molto far funzionare questo progetto esistente. Non funzionerà anche se creo un nuovo certificato!


3
Che tipo di progetto VS? Hai deselezionato "Firma i manifest ClickOnce" anche nella scheda Firma proprietà progetto?
Simon Mourier,

@Simon Mourier, se deseleziono questa opzione, il file non verrà firmato. Voglio che sia firmato! È un progetto C #. Funziona bene sulla mia macchina di sviluppo principale, ma non sul portatile.
Marcus,

Il messaggio di errore viene visualizzato nel registro di build o in qualche altro modo? Può essere utile copiare e incollare il registro.
Owen Wengerd,

Errore nel registro di build: "Impossibile trovare il certificato di firma manifest nell'archivio certificati"
Marcus

Non ho visto le righe di codice nella risposta accettata. Ma questo ha funzionato per me: ho creato una nuova chiave in VS2015. Ho deselezionato Firma l'Assemblea e salvato. Quindi ho fatto clic sul pulsante Seleziona da file, ho scelto il file che avevo appena creato, ho fatto nuovamente clic su Firma l'assembly e salvato. Ricostruita.
Tim

Risposte:


234

Ho finalmente trovato la soluzione e spero davvero che questo aiuti anche qualcun altro.

  1. Modifica il .csprojfile per il progetto in questione.
  2. Elimina le seguenti righe di codice:

    <PropertyGroup>
       <ManifestCertificateThumbprint>...........</ManifestCertificateThumbprint>
    </PropertyGroup>
    <PropertyGroup>
       <ManifestKeyFile>xxxxxxxx.pfx</ManifestKeyFile>
    </PropertyGroup>
    <PropertyGroup>
       <GenerateManifests>true</GenerateManifests>
    </PropertyGroup>
    <PropertyGroup>
       <SignManifests>false</SignManifests>
    </PropertyGroup>
    

1
Ha funzionato anche per me. Qualche avvertimento di tale azione?
Dottore Coder

1
Sì, ha eliminato tutto con "Manifest" e ha funzionato :-)
s1cart3r

2
Non lo farei senza conoscere le ripercussioni ... lo fa comunque
barnacle.m

Nel mio caso, eliminare ManifestCertificateThumbprinte ManifestKeyFilerisolvere il problema.
Ahmed Shamel,

Ha funzionato per me. Non ho idea di quali siano le ripercussioni, ma almeno una di queste è un progetto funzionante, quindi è abbastanza buono per me.
Parrotmaster il

149

Vai su "Proprietà" del tuo progetto in Visual Studio. Quindi vai alla scheda Firma.

Quindi assicurati di firmare il clic Una volta che i manifest sono disattivati.


Istruzioni aggiornate:

All'interno di Esplora soluzioni:

  1. fare clic con il tasto destro sul progetto
  2. fai clic su proprietà
  3. di solito sul lato sinistro, seleziona la scheda "Firma"
  4. spunta il segno Firma i manifesti ClickOnce
  5. Assicurati di salvare!

inserisci qui la descrizione dell'immagine


2
Quello che hai detto va bene e dovrebbe funzionare ma non ha funzionato. Alla fine ho dovuto eliminare le righe di codice come indicato nella risposta di seguito
Hamid Shahid,

1
Che cosa fa questo / cosa significa questa azione?
LazerSharks,

@TrailMix Modifica il file di configurazione in modo appropriato.
ADL

1
questo mi ha dato una soluzione per vs2010 :) su!
jace

1
Bella risposta! Sto usando VS2012 e funziona davvero! +1
kiLLua,

15

È semplice!!

Ho risolto questo problema seguendo questi passaggi:

  1. Apri le proprietà del progetto img
  2. Fai clic sulla scheda Firma
  3. E deseleziona "Firma l'assembly"

Questo è tutto!!


13
  1. Apri il file .csproj in Blocco note.
  2. Eliminare le seguenti informazioni relative alla firma del certificato nell'archivio certificati

    <PropertyGroup>
      <ManifestCertificateThumbprint>xxxxx xxxxxx</ManifestCertificateThumbprint>
      <ManifestKeyFile>xxxxxxxx.pfx</ManifestKeyFile>
    <GenerateManifests>true</GenerateManifests>
    <SignManifests>false</SignManifests>
    </PropertyGroup>
    

11

Prova questo: Fare clic destro sul vostro progetto -> Vai alla proprietà -> Clicca firma , che è il lato sinistro dello schermo -> Deseleziona il segno con un clic una volta si manifesta -> Save & Build


6

Vai ai tuoi progetti "Proprietà" in Visual Studio. Quindi vai alla scheda Firma.

Quindi assicurati di firmare il clic Una volta che i manifest sono disattivati.

O

1.Aprire il file .csproj in Blocco note.

2. Eliminare le seguenti informazioni relative alla firma del certificato nell'archivio certificati xxxxx xxxxxx xxxxxxxx.pfx true false `

Ha funzionato per me.


3

Supponendo che si tratti di un certificato personale creato da Windows sul sistema da cui è stato copiato il progetto, è possibile utilizzare il gestore certificati sul sistema in cui si trova ora il progetto e importare il certificato. Avviare il gestore certificati (certmgr) e selezionare i certificati personali, quindi fare clic con il tasto destro sotto l'elenco dei certificati esistenti e selezionare l'importazione dalle attività. Utilizzare la ricerca per trovare il .pfx nel progetto (il .pfx del sistema precedente che è stato copiato con il progetto). Dovrebbe essere nella sottodirectory con lo stesso nome della directory del progetto. Ho familiarità con C # e VS, quindi se questo non è il tuo ambiente forse il .pfx sarà altrove o forse questo suggerimento non si applica. Dopo l'importazione dovresti ricevere un messaggio di stato. Se hai avuto successo, l'errore di compilazione del certificato dovrebbe essere sparito.schermo certmgr


Chiaro e conciso!
Guido Leenders,

0

Non è sufficiente aggiungere manualmente le chiavi all'archivio certificati di Windows. Il certificato contiene solo la chiave pubblica firmata. È inoltre necessario importare la chiave privata associata alla chiave pubblica nel certificato. Un file .pfx contiene sia le chiavi pubbliche che private in un singolo file. Questo è ciò che devi importare.


Grazie ma l'ho già provato. Visual Studio dovrebbe aggiungere automaticamente il certificato quando ne crei uno nuovo comunque. Tuttavia, ho provato ad aggiungere manualmente il file .pfx. Ha lasciato Windows per installarlo nell'archivio certificati corretto e lo ha anche aggiunto al mio archivio personale.
Marcus,

La chiave privata non è archiviata nell'archivio certificati. Si prega di leggere questo, forse ti aiuterà a capire la distinzione: technet.microsoft.com/en-us/library/cc962112.aspx
Owen Wengerd

Vorrei aggiungere che è possibile verificare che la chiave privata associata sia disponibile aprendo la finestra delle proprietà del certificato in Gestione certificati. Se la chiave privata è disponibile, nella parte inferiore della pagina Generale viene visualizzato il seguente testo: "Hai una chiave privata che corrisponde a questo certificato". Se non vedi quel testo, la chiave privata non è installata.
Owen Wengerd,

Sì, dice "Hai una chiave privata che corrisponde a questo certificato".
Marcus,

Penso che il problema sia escluso dalla chiave o dal certificato.
Owen Wengerd,

0

Hai detto di aver copiato i file da un altro computer. Dopo averli copiati, li hai "sbloccati"? In particolare, il file .snk deve essere verificato per assicurarsi che non sia contrassegnato come non sicuro.


Non è bloccato, è venuto dal software di sincronizzazione di Windows Live Mesh. Tuttavia è irrilevante poiché anche la creazione di una nuova chiave all'interno di Visual Studio sul laptop non funzionerà.
Marcus,

0

Per firmare un assembly con un nome sicuro utilizzando gli attributi

Apri AssemblyInfo.cs(in $(SolutionDir)\Properties)

il AssemblyKeyFileAttributeo ilAssemblyKeyNameAttribute , specificando il nome del file o del contenitore che contiene la coppia di chiavi da usare quando si firma l'assembly con un nome sicuro.

aggiungi il seguente codice:

[assembly:AssemblyKeyFileAttribute("keyfile.snk")]

L'aggiunta di questa riga non fa differenza, ho ancora lo stesso errore.
Marcus,

0

Se hai solo bisogno di costruire il progetto o la soluzione localmente, rimuovere la firma potrebbe essere una soluzione semplice e morta come suggeriscono altri.

Ma se si verifica questo errore sul server di compilazione dell'automazione come TeamCity in cui si creano i pezzi di rilascio effettivi per l'implementazione o la distribuzione, è possibile considerare come ottenere questo certificato correttamente installato nell'archivio certificati sulla macchina di compilazione, in modo da ottenere un pacchetto firmato alla fine della compilazione.

Generalmente non è consigliabile archiviare / eseguire il commit di alcun certificato PFX nel controllo del codice sorgente, quindi come ottenere questi file sul server di compilazione durante il processo di compilazione è un po 'un'altra domanda, ma a volte le persone hanno questo file archiviato insieme alla soluzione codice, in modo da poterlo trovare nella cartella del progetto.

Tutto quello che devi fare è semplicemente installare questo certificato con l' account corretto sul tuo server di build.

  1. Scarica PsExec da Windows Sysinternals .

  2. Apri un prompt dei comandi e inserisci quanto segue. Genererà un nuovo prompt dei comandi, in esecuzione come Sistema locale (presupponendo che TeamCity sia in esecuzione con l'account di Sistema locale predefinito):

    > psexec.exe -i -s cmd.exe

  3. In questo nuovo prompt dei comandi, passare alla directory contenente il certificato e immettere il nome file da installare (modificare il nome del file nel proprio):

    > mykey.pfx

  4. Verrà avviata la procedura guidata Importa certificato. Fare clic e selezionare tutte le impostazioni predefinite suggerite.

  5. Esegui la build.

Tutti i crediti vanno a Stuart Noble (e poi a Laurent Kempé credo ☺).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.