Ich habe ein paar Bibliotheken, die ich in meinem Projekt verwende, die nicht signiert sind. Da meine Anwendung stark signiert ist, müssen auch die Bibliotheken funktionieren.Wie kann ich eine externe DLL stark unter Beibehaltung ihrer Assemblymetadaten signieren?
Ich unterzeichne diese Bibliotheken mit:
"%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\Bin\ildasm.exe" /nobar /all /out=library.il library.dll
"%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\ilasm.exe" /dll /key=MyKey.snk library.il
Das Problem ist, dass jede Metadaten wie Versionsnummern, in dem jetzt unterzeichneten DLL verloren gehen. Dies ist ein Problem, da jetzt einige Abhängigkeiten zwischen den Bibliotheken unterbrochen sind. Wie behalte ich die Versionsnummern, ohne den Quellcode dieser Bibliotheken tatsächlich zu kompilieren?
UPDATE
Es ist eigentlich eine bestimmte DLL, die dieses Problem zeigt, und ich habe, dass ILMerge mit integrierten herausgefunden wird. Vielleicht verursacht das das Problem. Nur um es klar zu stellen: Die DLL, die von ILMerge erzeugt wird, hat die richtigen Metadaten, erst nachdem sie zerlegt und neu zusammengesetzt wurden, verschwinden die Metadaten.
UPDATE 2
öffnete ich die DLL in Reflector und es scheint, dass die Versionsnummer immer noch da zumindest ist. Ich habe die Verwendung des Dateieigenschaften-Dialogfelds/Details im Windows Explorer ständig überprüft. So stelle ich fest, dass es das Manifest ist, das stattdessen fehlt.
Ich habe es wieder in einer isolierten Umgebung versucht und wieder verschwinden alle Metadaten. In der generierten IL-Datei kann ich die Versionsnummer unten im Assembly-Bereich sehen, wie Sie es vorgeschlagen haben. In der Zwischenzeit kam ich zu der Erkenntnis, dass die Tatsache, dass diese spezielle DLL mit ILMerge erstellt wurde, das Problem verursacht. –
Haben Sie die Ausgabe von ILMerge überprüft? Grundsätzlich kann ich mir nicht vorstellen, dass es wichtig ist, was vorher mit der Assembly passiert ist, wenn die Assembly-Version in ildasms output vorhanden ist, sollte ilasm sie korrekt behandeln. –
Ich öffnete die DLL in Reflector und es scheint, dass zumindest die Versionsnummer noch da ist. Ich habe die Verwendung des Dateieigenschaften-Dialogfelds/Details im Windows Explorer ständig überprüft. So stelle ich fest, dass es das Manifest ist, das stattdessen fehlt. Dies sollte keinen Einfluss auf die Baugruppenbindung haben, oder? –