"Manifest-Signaturzertifikat im Zertifikatspeicher nicht gefunden" - auch wenn ein neuer Schlüssel hinzugefügt wird

153

Ich kann keine Projekte mit einer starken Namensschlüssel-Signatur erstellen - die Meldung im Titel wird immer angezeigt.

Ja, das Projekt wurde ursprünglich von einem anderen Computer kopiert. Selbst wenn ich über die Registerkarte Signieren in den Projekteigenschaften einen neuen Schlüssel hinzufüge, wird dieser Fehler weiterhin angezeigt.

Ich habe versucht, Visual Studio als Administrator auszuführen, und habe versucht, die Schlüssel manuell zum Windows-Zertifikatspeicher hinzuzufügen.

Hilfe!

Bearbeiten: Ich erhalte diesen Fehler bei einem neuen Projekt nicht, aber ich würde dieses vorhandene Projekt gerne zum Laufen bringen. Es wird nicht funktionieren, auch wenn ich ein neues Zertifikat erstelle!

Marcus
quelle
3
Welche Art von VS-Projekt? Haben Sie das Kontrollkästchen "Signieren der ClickOnce-Manifeste" auch auf der Registerkarte Signieren der Projekteigenschaften deaktiviert?
Simon Mourier
@ Simon Mourier, wenn ich diese Option deaktiviere, wird die Datei nicht signiert. Ich möchte, dass es unterschrieben wird! Es ist ein C # -Projekt. Funktioniert gut auf meinem Hauptentwicklungscomputer, nur nicht auf dem Laptop.
Marcus
Wird die Fehlermeldung in Ihrem Build-Protokoll oder auf andere Weise angezeigt? Es kann hilfreich sein, wenn Sie das Protokoll kopieren und einfügen.
Owen Wengerd
Ein Fehler im Build-Protokoll: "Manifest Signing Certificate konnte nicht im Zertifikatspeicher gefunden werden"
Marcus
Ich habe die Codezeilen in der akzeptierten Antwort nicht gesehen. Aber das hat bei mir funktioniert: Ich habe in VS2015 einen neuen Schlüssel erstellt. Ich habe die Option Unterzeichnen der Versammlung deaktiviert und gespeichert. Dann habe ich auf die Schaltfläche Aus Datei auswählen geklickt, die gerade erstellte Datei ausgewählt, erneut auf Baugruppe signieren geklickt und gespeichert. Wieder aufgebaut.
Tim

Antworten:

234

Ich habe endlich die Lösung gefunden und hoffe wirklich, dass dies auch jemand anderem hilft.

  1. Bearbeiten Sie die .csprojDatei für das betreffende Projekt.
  2. Löschen Sie die folgenden Codezeilen:

    <PropertyGroup>
       <ManifestCertificateThumbprint>...........</ManifestCertificateThumbprint>
    </PropertyGroup>
    <PropertyGroup>
       <ManifestKeyFile>xxxxxxxx.pfx</ManifestKeyFile>
    </PropertyGroup>
    <PropertyGroup>
       <GenerateManifests>true</GenerateManifests>
    </PropertyGroup>
    <PropertyGroup>
       <SignManifests>false</SignManifests>
    </PropertyGroup>
    
Marcus
quelle
1
Hat auch für mich gearbeitet. Irgendwelche Vorbehalte gegen solche Aktionen?
Doktor Coder
1
Ja, alles mit "Manifest" gelöscht und es hat funktioniert :-)
s1cart3r
2
Ich würde das nicht tun, ohne die Auswirkungen zu kennen ... tut es trotzdem
barnacle.m
In meinem Fall das Problem löschen ManifestCertificateThumbprintund ManifestKeyFilelösen.
Ahmed Shamel
Hat für mich gearbeitet. Keine Ahnung, welche Auswirkungen dies hat, aber mindestens eines davon ist ein Arbeitsprojekt, das ist gut genug für mich.
Papageienmeister
146

Gehen Sie in Visual Studio zu den "Eigenschaften" Ihres Projekts. Gehen Sie dann zur Registerkarte Signieren.

Stellen Sie dann sicher, dass Sign the Click Once Manifests deaktiviert ist.


Aktualisierte Anweisungen:

In Ihrem Projektmappen-Explorer:

  1. Klicken Sie mit der rechten Maustaste auf Ihr Projekt
  2. Klicken Sie auf Eigenschaften
  3. Wählen Sie normalerweise auf der linken Seite die Registerkarte "Signieren"
  4. Aktivieren Sie das Kontrollkästchen ClickOnce-Manifest manifestieren
  5. Stellen Sie sicher, dass Sie sparen!

Geben Sie hier die Bildbeschreibung ein

ADL
quelle
2
Was Sie gesagt haben, ist in Ordnung und sollte funktionieren, hat es aber nicht getan. Am Ende musste ich die Codezeilen löschen, wie in der Antwort unten erwähnt
Hamid Shahid
1
Was bedeutet das / was bedeutet diese Aktion?
LazerSharks
@TrailMix Die Konfigurationsdatei wird entsprechend geändert.
ADL
1
Dies gab mir eine Lösung für vs2010 :) up!
Jace
1
Gute Antwort! Ich benutze VS2012 und es funktioniert wirklich! +1
KiLLua
15

Es ist einfach!!

Ich habe dieses Problem folgendermaßen gelöst:

  1. Öffnen Sie die Projekteigenschaften img
  2. Klicken Sie auf die Registerkarte Signieren
  3. Und deaktivieren Sie "Unterzeichnen Sie die Versammlung"

Das ist es!!

Amit Kadam
quelle
13
  1. Öffnen Sie die .csproj-Datei im Editor.
  2. Löschen Sie die folgenden Informationen zum Signieren des Zertifikats im Zertifikatspeicher

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

Versuchen Sie Folgendes : Klicken Sie mit der rechten Maustaste auf Ihr Projekt -> Gehen Sie zu Eigenschaften -> Klicken Sie auf Signieren auf der linken Seite des Bildschirms -> Deaktivieren Sie das Kontrollkästchen Klicken Sie, sobald sich der Klick manifestiert -> Speichern und erstellen

Kamala Hanchinal
quelle
6

Gehen Sie zu Ihren Projekten "Eigenschaften" in Visual Studio. Gehen Sie dann zur Registerkarte Signieren.

Stellen Sie dann sicher, dass Sign the Click Once Manifests deaktiviert ist.

ODER

1.Öffnen Sie die .csproj-Datei im Editor.

2. Löschen Sie die folgenden Informationen zum Signieren des Zertifikats im Zertifikatspeicher xxxxx xxxxxx xxxxxxxx.pfx true false `

Hat für mich gearbeitet.

Asche
quelle
3

Angenommen, dies ist ein persönliches Zertifikat, das von Windows auf dem System erstellt wurde, von dem Sie Ihr Projekt kopiert haben, können Sie den Zertifikatmanager auf dem System verwenden, auf dem sich das Projekt jetzt befindet, und das Zertifikat importieren. Starten Sie den Zertifikatsmanager (certmgr) und wählen Sie die persönlichen Zertifikate aus. Klicken Sie dann mit der rechten Maustaste unter die Liste der vorhandenen Zertifikate und wählen Sie Import aus den Aufgaben. Verwenden Sie die Suche, um die PFX im Projekt zu finden (die PFX des vorherigen Systems, das Sie mit dem Projekt kopiert haben). Es sollte sich im Unterverzeichnis mit demselben Namen wie das Projektverzeichnis befinden. Ich bin mit C # und VS vertraut. Wenn dies also nicht Ihre Umgebung ist, befindet sich die PFX möglicherweise an einer anderen Stelle, oder dieser Vorschlag trifft möglicherweise nicht zu. Nach dem Import sollten Sie eine Statusmeldung erhalten. Wenn Sie erfolgreich waren, sollte der Fehler beim Kompilieren des Zertifikats behoben sein.certmgr Bildschirm

dpminusa
quelle
Klar und prägnant!
Guido Leenders
0

Es reicht nicht aus, dem Windows-Zertifikatspeicher manuell Schlüssel hinzuzufügen. Das Zertifikat enthält nur den signierten öffentlichen Schlüssel. Sie müssen auch den privaten Schlüssel importieren, der dem öffentlichen Schlüssel im Zertifikat zugeordnet ist. Eine PFX-Datei enthält sowohl öffentliche als auch private Schlüssel in einer einzigen Datei. Das müssen Sie importieren.

Owen Wengerd
quelle
Danke, aber das habe ich schon versucht. Visual Studio sollte das Zertifikat trotzdem automatisch hinzufügen, wenn Sie ein neues erstellen. Ich habe jedoch versucht, die PFX-Datei auch manuell hinzuzufügen. Linke Fenster, um es im richtigen Zertifikatspeicher zu installieren und es auch meinem persönlichen Speicher hinzuzufügen.
Marcus
Der private Schlüssel wird nicht im Zertifikatspeicher gespeichert. Bitte lesen Sie dies, vielleicht hilft es Ihnen, die Unterscheidung zu verstehen: technet.microsoft.com/en-us/library/cc962112.aspx
Owen Wengerd
Ich sollte hinzufügen, dass Sie überprüfen können, ob der zugehörige private Schlüssel verfügbar ist, indem Sie das Fenster mit den Zertifikateigenschaften im Zertifikatmanager öffnen. Wenn der private Schlüssel verfügbar ist, wird unten auf der Seite Allgemein der folgende Text angezeigt: "Sie haben einen privaten Schlüssel, der diesem Zertifikat entspricht". Wenn Sie diesen Text nicht sehen, ist der private Schlüssel nicht installiert.
Owen Wengerd
Ja, es heißt "Sie haben einen privaten Schlüssel, der diesem Zertifikat entspricht".
Marcus
Ich denke, das schließt den Schlüssel oder das Zertifikat als Problem aus.
Owen Wengerd
0

Sie sagten, Sie hätten Dateien von einem anderen Computer kopiert. Haben Sie sie nach dem Kopieren "entsperrt"? Insbesondere sollte die .snk-Datei überprüft werden, um sicherzustellen, dass sie nicht als unsicher markiert ist.

Owen Wengerd
quelle
Es ist nicht blockiert, es wurde von der Windows Live Mesh-Synchronisierungssoftware übernommen. Dies ist jedoch irrelevant, da selbst das Erstellen eines neuen Schlüssels in Visual Studio auf dem Laptop nicht funktioniert.
Marcus
0

So signieren Sie eine Assembly mit einem starken Namen mithilfe von Attributen

Öffnen AssemblyInfo.cs(in$(SolutionDir)\Properties )

das AssemblyKeyFileAttributeoder dasAssemblyKeyNameAttribute , das den Namen der Datei oder des Containers angibt, die das Schlüsselpaar enthält, das beim Signieren der Assembly mit einem starken Namen verwendet werden soll.

Fügen Sie den folgenden Code hinzu:

[assembly:AssemblyKeyFileAttribute("keyfile.snk")]
QuangNHb
quelle
Das Hinzufügen dieser Zeile macht keinen Unterschied, ich erhalte immer noch den gleichen Fehler.
Marcus
0

Wenn Sie das Projekt oder die Lösung nur lokal erstellen müssen, ist das Entfernen der Signatur möglicherweise eine kinderleichte Lösung, wie andere vorschlagen.

Wenn Sie diesen Fehler jedoch auf Ihrem Automatisierungs-Build-Server wie TeamCity haben, auf dem Sie Ihre eigentlichen Release-Teile für die Bereitstellung oder Verteilung erstellen, sollten Sie überlegen, wie Sie dieses Zertifikat ordnungsgemäß im Zertifikatspeicher auf dem Build-Computer installieren können, damit Sie es erhalten ein signiertes Paket am Ende des Builds.

Im Allgemeinen wird nicht erneut mit dem Einchecken / Festschreiben von PFX- Zertifikaten in die Quellcodeverwaltung begonnen. Daher ist es eine etwas andere Frage, wie Sie diese Dateien während des Erstellungsprozesses auf Ihrem Build-Server abrufen. Manchmal wird diese Datei jedoch zusammen mit der Lösung gespeichert Code, damit Sie ihn im Projektordner finden können.

Sie müssen dieses Zertifikat lediglich unter einem geeigneten Konto auf Ihrem Build-Server installieren .

  1. Laden Sie PsExec von Windows Sysinternals herunter .

  2. Öffnen Sie eine Eingabeaufforderung und geben Sie Folgendes ein. Es wird eine neue Eingabeaufforderung angezeigt, die als lokales System ausgeführt wird (vorausgesetzt, Ihre TeamCity wird unter dem Standardkonto für lokales System ausgeführt):

    > psexec.exe -i -s cmd.exe

  3. Wechseln Sie in dieser neuen Eingabeaufforderung in das Verzeichnis, in dem sich das Zertifikat befindet, und geben Sie den zu installierenden Dateinamen ein (ändern Sie den Namen der Datei in Ihren):

    > mykey.pfx

  4. Der Assistent zum Importieren von Zertifikaten wird gestartet. Klicken Sie sich durch und wählen Sie alle vorgeschlagenen Standardeinstellungen aus.

  5. Führen Sie den Build aus.

Alle Credits gehen an Stuart Noble (und dann weiter an Laurent Kempé, glaube ich ☺).

Sevenate
quelle