MSBuild kann ein ClickOnce-Manifest nicht mit einem temporären Schlüssel signieren (Fehler MSB3326 und MSB3321)

9

Ich versuche, ein ClickOnce Windows Forms -Projekt (.NET 3.5 / Visual Studio 2010) auf einem Windows Server zu erstellen Computer. (In dem Bemühen, den Build-Prozess mit Hudson zu automatisieren CI .)

Zum Signieren des ClickOnce-Manifests habe ich in Visual Studio einen temporären Schlüssel erstellt, temp.pfx . Ich kann das Projekt erfolgreich von Visual Studio auf meiner Arbeitsstation erstellen und bereitstellen. Aber beim Ausführen von MSBuild auf dem Server erhalte ich die folgenden Fehlermeldungen:

  

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Microsoft.Common.targets (1970,9): Fehler MSB3326: Die folgende Schlüsseldatei kann nicht importiert werden:. Die Schlüsseldatei kann passwortgeschützt sein. Um dies zu korrigieren, versuchen Sie, das Zertifikat erneut zu importieren, oder importieren Sie das Zertifikat manuell in den persönlichen Zertifikatspeicher des aktuellen Benutzers. [C: .hudson \ jobs [...]. Csproj]

     

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Microsoft.Common.targets (1970,9): Fehler MSB3321: Das Importieren der Schlüsseldatei "temp.pfx" wurde abgebrochen. [C: .hudson \ jobs [...]. Csproj]

Ich habe alle folgenden Fragen und Antworten ohne Glück versucht:

  • Stapelüberlauffrage Kann die Schlüsseldatei 'blah.pfx' nicht importieren - Fehler 'Die Schlüsseldatei kann passwortgeschützt sein'

    = & gt; In meinem Fall gibt die Fehlermeldung nicht den Namen eines Zertifikatspeichers an, sondern "stattdessen den persönlichen Zertifikatspeicher des aktuellen Benutzers".

    = & gt; Selbst wenn Sie die akzeptierte Antwort mit "Personal" als Containername ( sn -i temp.pfx personal ) versuchen, kann der Schlüssel nicht analysiert werden:

      

    Fehler beim Parsen des PKCS # 12-Blobs in ALiS_TemporaryKey.pfx - Ein interner Fehler o   curred.

  • Stapelüberlauffrage Verwenden von MSBuild zum Signieren von ClickOnce- oder Assemblierungsergebnissen im Fehler MSB3321

    = & gt; Ich habe die akzeptierte Antwort versucht, aber die Schlüsseldatei kann nicht importiert werden, da "Entweder das Benutzerprofil nicht zugänglich ist oder der private Schlüssel, den Sie importieren, einen Kryptografiedienstanbieter erfordert, der nicht auf Ihrem System installiert ist"

    = & gt; Dasselbe passiert, wenn ich versuche, die Datei zu importieren, indem ich sie im Windows-Explorer (Vorschlag von RobinDotNet) doppelklicke

  • Stapelüberlauffrage Unterzeichnen von Baugruppen mit PFX-Dateien in MSBuild, Team Build und TFS

    = & gt; Das OP dieser Frage war auch mit den obigen zwei Antworten erfolglos, aber leider würden nicht einmal die Antworten, die er bekam, mir helfen:

      

    Melden Sie sich als Benutzer an, der MSBuild auf dem Erstellungscomputer ausführt, rufen Sie MSBuild manuell auf und geben Sie das Kennwort ein, wenn Sie dazu aufgefordert werden.

    = & gt; Ich habe mich angemeldet und msbuild myproject.sln ausgeführt, aber es hat mich nicht einmal zur Eingabe des Passworts aufgefordert.

      

    Was es schließlich für mich behoben hat, war das Konto, unter dem der TFS-Build-Dienst einen Administrator auf dem lokalen Rechner ausführt.

    = & gt; Das Konto, auf dem Hudson (genauer: Tomcat ) bereits läuft, ist ein lokaler Administrator. Ich habe versucht, MSBuild von einer "Ausführen als Administrator" -Befehlszeile sogar auszuführen und würde immer noch die gleichen Fehlermeldungen erhalten.

Update: Ich habe versucht, die Lösung in Visual Studio auf demselben Server zu öffnen und sie zu erstellen. Ich bekomme den gleichen Fehler. Wenn ich versuche, die PFX-Datei auf der Registerkarte "Signieren" der Projekteigenschaften erneut zu importieren, wird ein ungültiges Kennwort angezeigt. Wenn ich versuche, die gleiche Datei in derselben Lösung in Visual Studio auf meiner Arbeitsstation zu importieren und das gleiche Kennwort anzugeben, wird es akzeptiert.

Update 2: Wenn ich einen alten temporären Schlüssel verwende, den ich mit Visual Studio 2008 generiert habe, kann er erfolgreich in den Zertifikatsspeicher unseres Servers importiert werden; Alle temporären Schlüssel, die ich neu mit Visual Studio 2010 erstellt habe, können nicht importiert werden.

Update 3: Ich konnte einen neuen "temporären Schlüssel" in Visual Studio auf dem Server erstellen und ihn sowohl auf dem Server als auch auf meiner Arbeitsstation zum Signieren des ClickOnce-Manifests verwenden. Ich kann nur eine vernünftige Erklärung dafür nicht finden - beide Computer sind 64-Bit, und ich verwende Visual Studio 2010 auf beiden. Beide haben das v3.5 und v4 (4.0.30319) .NET Framework installiert. Meine Arbeitsstation ist ein Windows 7 Professional und der Server ist ein Windows Server 2008 R2-Standard.

    
chiccodoro 22.06.2012, 12:08
quelle

4 Antworten

6

Kopieren Sie die PFX-Datei auf die Maschine, auf der Sie die Builds durchführen. Doppelklicken Sie darauf und installieren Sie es im Zertifikatsmanager auf dem Computer. Stellen Sie sicher, dass Sie bei dem Konto angemeldet sind, mit dem die Builds erstellt wurden.

Andere Vorschläge / Fragen: Haben Sie die richtige Version von .NET auf dem Rechner installiert? Verfügen Sie über Berechtigungen zum Schreiben in den Zertifikatspeicher auf diesem Computer?

Wenn Sie das Visual Studio-Projekt öffnen, gehen Sie zu den Projekteigenschaften und versuchen Sie, ein neues Zertifikat zu erstellen, funktioniert es? Es sollte eine PFX-Datei erstellen und sie zum Projekt hinzufügen. Und können Sie es im Zertifikatsspeicher sehen (Menü Start / certmgr.msc)?

    
RobinDotNet 04.07.2012, 23:52
quelle
0

Ich habe festgestellt, dass, wenn Sie eine temporary.pfx-Datei erstellen und das Kennwort leer lassen, es auf dem Erstellungscomputer funktioniert. Mir war nicht klar, dass du es leer lassen könntest und das erste Mal wie OP gescheitert ist. Ich habe eine zweite temp.pfx ohne Passwort erstellt und sie wurde auf dem Build-Server für mich erstellt.

    
clee2005 05.02.2015 20:36
quelle
0

Ich hatte das gleiche Problem. Und das wurde behoben, indem Windows SDK 7.1 für .net 4.0 auf dem Build-Rechner installiert wurde. PS Zuerst haben wir SDK 8.0A installiert, und Build funktionierte gut außer dem Singen. Es scheint, 7.1 aktualisiert einige Komponenten im System, so pfx beginnt zu arbeiten.

    
Vladimir Perevalov 16.04.2015 08:55
quelle
-1

Ich hatte dasselbe Problem, konnte nicht auf TFS-Maschine importieren. Es stellte sich heraus, dass ich es auf dem Entwicklungscomputer exportieren musste (Projekteigenschaften, Signierseite, klicke auf weitere Details) ausführlicher - & gt; Registerkarte Details und dann einfach mit einem Passwort exportieren. Kopieren Sie die exportierte Datei nach TFS und verwenden Sie dasselbe Passwort: done

    
CodeDigger 14.03.2014 18:08
quelle