Ich verwende Visual Studio 2012 und schreibe einen Back-End-Web-Service und Desktop-Software in separaten Lösungen. Da die Desktop-Software "erhöht" ("als Administrator") ausgeführt werden muss, muss ich die Desktop-Lösung in einer erhöhten Visual Studio-Instanz ausführen. Beide Lösungen enthalten ein signiertes Bibliotheksprojekt.
Wenn ich die Web-Service-Lösung in einer Visual Studio-Instanz öffne, ohne sie zu erhöhen, erhalte ich einen Build-Fehler wie
Die folgende Schlüsseldatei kann nicht importiert werden: Redactive.pfx. Die Schlüsseldatei kann passwortgeschützt sein. Um dies zu korrigieren, versuchen Sie, das Zertifikat erneut zu importieren, oder installieren Sie das Zertifikat manuell mit folgendem Schlüsselcontainernamen in den CSP für starke Namen: VS_KEY_Redacted.
Wenn ich versuche, das Problem zu beheben, indem Sie das tun , schlägt es mit einer Fehlermeldung fehl, die besagt, dass der Schlüssel bereits existiert.
Wenn ich versuche, die PFX-Datei auszuschließen und dann wieder einzuschließen, werden die Dinge nicht richtig gestellt, aber die Dropdown-Liste "Name des starken Namens" in den Projekteigenschaften → Leere Unterschriften wird erstellt. Danach baut die Web-Service-Lösung, aber es scheint, dass die Bibliothek nicht signiert wird, da in der (erhöhten) Desktop-Lösung Builds mit "Assembly generation failed - Referenzierte Assembly 'redacted' hat keinen starken Namen" fehlschlagen.
Wenn ich versuche, die PFX-Datei erneut aus dem Dropdown-Menü innerhalb der Web-Service-Lösung auszuwählen (und das Passwort erneut einzugeben), bekomme ich:
Fehler beim Importieren der Schlüssel
Es wurde versucht, auf ein Token zu verweisen, das nicht existiert
Das Setzen der PFX-Datei von der (erhöhten) Desktop-Lösung funktioniert, bringt mich aber auf Platz eins zurück.
Es scheint, dass Visual Studio abhängig von der Höhe in verschiedenen Schlüsselspeichern nach dem Zugriff auf alles sucht, was den PFX entsperrt. Muss ich beide Instanzen von Visual Studio aktiviert ausführen, um das Problem zu umgehen, oder kann ich es irgendwie an derselben Stelle suchen?
@ccpandas Kommentar löste das. Durch die Einbindung eines AssemblyKeyFile
-Archivs funktioniert dies. Zum Beispiel:
Kurz und gut, die beiden Visual Studios werden je nach Modus unterschiedliche Dinge annehmen. Die Lösung besteht nicht darin, sie dazu zu bringen, dasselbe anzunehmen, sondern ihnen zu sagen, was zu tun ist.
(Ich habe mich entschieden, eine .snk
-Datei zu verwenden, da dies die Art ist, wie Sie es tun müssen, wenn Sie nicht jedes Mal, wenn jeder andere Entwickler versucht, ein Kennwort erneut einzugeben. Diese Frage hat viel mehr Informationen . Grundsätzlich müssen Sie Verwenden Sie entweder eine .snk
-Datei oder lassen Sie Ihren Build-Prozess kompilieren und signieren Sie dann die Datei mit einem Aufruf von sn.exe
, der irgendwie eine .pfx
-Datei für alle verwenden kann.)
(@ ccpanda: Wenn du deinen Kommentar als Antwort schreibst (und vielleicht hast du es getan und Stack Overflow hat hilfreich entschieden, dass es trivial war), werde ich das als Antwort markieren.)
Tags und Links .net visual-studio-2012 code-signing strongname