none
Strong Name für Microsoft.Practices.Composite-DLL führt zu Compilerfehler

    Frage

  • Hallo zusammen,

    ich würde gerne alle Projekte aus meiner C#-Solution signieren. Dabei gibt es allerdings das Problem, dass einige der von mir verwendeten Drittanbieter-Assemblies keinen "Strong Name" zu haben scheinen. Bei diesen Assemblies handelt es sich um:

    • Microsoft.Practices.Composite.dll
    • Microsoft.Practices.Composite.Presentation.dll
    • Microsoft.Practices.ServiceLocation.dll
    • Microsoft.Practices.Unity.Configuration.dll
    • Microsoft.Practices.Unity.dll

    Jetzt habe ich ein bisschen recherechiert und dabei folgende Möglichkeit gefunden, Dritteranbieter-DLLs mit einem Strong Name zu versehen (Quelle):

    1) ildasm /all /out=ThirdParty.il ThirdParty.dll
    
    2) ilasm /dll /key=YourKey.snk ThirdParty.il


    So weit hat auch alles funktioniert. Wenn ich jetzt allerdings die entsprechenden NuGet-Packages aus meiner Solution entferne und meine eigenen DLLs als Referenz hinzufüge, erhalte ich bei der Kompilierung Fehlermeldungen wie folgende:

    The type 'Microsoft.Practices.Composite.Events.EventBase' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.Practices.Composite, Version=2.0.1.0, Culture=neutral, PublicKeyToken=null'

    Da ich die in den Fehlermeldungen erwähnten Assemblies bereits alle hinzufügt habe, gehe ich davon aus, dass das Problem im hinteren Teil der Fehlermeldung liegt (Version=2.0.1.0, Culture=neutral, PublicKeyToken=null). Insbesondere der Teil "PublicKeyToken=null" irritiert mich. Sollte der PublicKeyToken nach dem Hinzufügen eines Strong Names nicht einen Wert beinhalten?

    Habe ich etwas vergessen? Ich freue mich über jede Hilfe.

    Viele Grüße

    - timnot90


    • Bearbeitet timnot90 Montag, 22. Juni 2015 09:28 Ergänzungen
    Montag, 22. Juni 2015 08:41

Antworten

  • Ich habe mein Problem jetzt dadurch umgangen, dass ich die Composite Library auf Prism aktualisiert habe, welches bereits signiert zu sein scheint. 

    Leider wusste ich bis heute nicht, dass Prism seit Version 4 die Composite Library beinhaltet.

    • Als Antwort markiert timnot90 Mittwoch, 24. Juni 2015 14:55
    Mittwoch, 24. Juni 2015 14:55

Alle Antworten

  • Hallo, Die Fehlermeldung sagt aus, dass du Code aus einer Assembly (Microsoft.Practices.Composites) nutzt, die du nicht referenziert hast.

    Viele Grüße Holger M. Rößler

    Montag, 22. Juni 2015 08:59
  • Hallo und vielen Dank erst mal für deine Antwort.

    Ich habe gerade bemerkt, dass ich mein Problem nicht deutlich genug beschrieben habe. Ich habe bereits alle Assemblies wieder hinzugefügt. Einschließlich Microsoft.Practices.Composites. 

    Ich gehe daher eher davon aus, dass das Problem im hinteren Teil der Fehlermeldung liegt (Version=2.0.1.0, Culture=neutral, PublicKeyToken=null). Insbesondere der Teil "PublicKeyToken=null" irritiert mich. Sollte der PublicKeyToken nach dem Hinzufügen eines Strong Names nicht einen Wert beinhalten?

    Kann es sein, dass Visual Studio sich noch in irgendeiner Art Cache eine ältere (nicht signierte) Version der Assembly hält?

    Montag, 22. Juni 2015 09:25
  • Ich habe mein Problem jetzt dadurch umgangen, dass ich die Composite Library auf Prism aktualisiert habe, welches bereits signiert zu sein scheint. 

    Leider wusste ich bis heute nicht, dass Prism seit Version 4 die Composite Library beinhaltet.

    • Als Antwort markiert timnot90 Mittwoch, 24. Juni 2015 14:55
    Mittwoch, 24. Juni 2015 14:55