2012-04-19 21 views
5

Ich habe eine signierte Klassenbibliothek, für die ich Assemblys über das Werkzeug sgen erstellen möchte. Ich erhalte jedoch einen Fehler, wenn ich versuche, den folgenden Befehl ausführen:Eine temporäre Klasse konnte nicht generiert werden - Kryptografischer Fehler beim Signieren der Assembly

$ sgen.exe /a:testsign.dll /force /compiler:/keyfile:..\..\testsign.pfx /verbose /n
Error: Unable to generate a temporary class (result=1).
error CS1548: Cryptographic failure while signing assembly '[...path...]\TestSign.XmlSerializers.dll' -- 'Error signing assembly - - The parameter is incorrect. '

If you would like more help, please type "sgen /?".

ich den Fehler überprüft auf MSDN die besagt, dass

CS1548 occurs when assembly signing fails. This is usually due to an invalid key file name, an invalid key file path, or a corrupt key file.

Allerdings habe ich nur den Schlüssel erstellt, der Pfad korrekt ist und meines Wissens erstellt Visual Studio 2010 keine beschädigten Schlüssel.

Dieses Problem ist relativ einfach zu reproduzieren.

  1. Mit dem Code pasted here erstellen Sie eine neue Klassenbibliothek.
  2. Erstellen Sie zwei Klassen, eine class TestSigning und ein class Model
  3. gehen Objekte zum Projekt> Signieren und überprüfen „Diese Baugruppe Anmeldung“ die
  4. erstellen Sie einen neuen starken Namen Schlüsseldatei
  5. Visual Studio-Eingabeaufforderung öffnen (2010)
  6. die dLL finden und sgen /a:<dllname> [... as above ...]

Meine Vermutung ist, etwas mit dem öffentlichen Schlüssel für die Schlüssel-Datei laufen .. Aber ich kann keine Quellen nicht finden, wie ich 01 informierenwelches Passwort ich verwendet habe, um meine Schlüsseldatei zu schützen.

Ich bin mir nicht sicher, wie es weitergeht. die anderen Threads, die ich hier auf SO angeschaut habe, haben den gleichen Fehler "header" unable to generate temporary class aber andere Fehlerdetails, für die keiner die Cryptographic failure (die ich gefunden habe).

Antwort

3

Folgen Sie den Anweisungen in this thread dieses Problem gelöst. Obwohl dies nicht manuell mit dem Tool sgen durchgeführt wurde, wurde es über Visual Studio ausgeführt.

Das heißt, das obige Beispiel folgendermaßen geändert:

  1. wie vor
  2. wie vor
  3. wie vor
  4. wie vor
  5. Gehen Sie auf die Registerkarte Build
  6. die Set Generieren Sie die Serialisierungsbaugruppe zu On
  7. Rechts das Projekt klicken und Unload Projekt
  8. Rechts das Projekt klicken und wählen Sie * edit nnn.csproj wählen **
  9. Fügen Sie den folgenden Code-Schnipsel irgendwo

    <PropertyGroup> 
        <SGenUseProxyTypes>false</SGenUseProxyTypes> 
        <SGenPlatformTarget>$(Platform)</SGenPlatformTarget> 
    </PropertyGroup> 
    
  10. neu laden und bauen die Projekt.

+0

funktioniert nicht :) Das gleiche Problem persistierenden @Default –

+0

es vor 3 Jahren gearbeitet, als ich diese Antwort geschrieben. Wenn Sie ein Problem haben, kann ich vorschlagen, eine neue Frage zu stellen? (Wenn Sie möchten, können Sie auf diese Frage verlinken und erklären, warum es Ihnen nicht geholfen hat, damit es nicht als Duplikat geschlossen wird) – Default

1

Anfangs war ich in der Lage, Projekte ohne irgendwelche Schluckauf zu bauen. Es war ziemlich seltsam, wenn ein anderes einfaches Projekt nicht erstellt/veröffentlicht werden konnte und stattdessen diesen Fehler warf.

Ich konnte dies erstellen, nachdem ich Visual Studio als Administrator ausgeführt habe.

Referenz: Gordon's 3log