Wie könnte ich dringend eine externe DLL-Zeichen, während seine Montage Metadaten beibehalten?

StackOverflow https://stackoverflow.com/questions/3497455

  •  29-09-2019
  •  | 
  •  

Frage

habe ich ein paar Bibliotheken, die ich in meinem Projekt verwenden, die nicht signiert sind. Da meine Anwendung stark unterzeichnet ist, müssen die Bibliotheken als gut.

ich diese Bibliotheken anmelden 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, weil jetzt einige Abhängigkeiten zwischen den Bibliotheken aufgebrochen werden. Wie behalte ich die Versionsnummern ohne tatsächlich zurückzugreifen, den Quellcode dieser Bibliotheken kompilieren?

UPDATE

Es ist eigentlich eine bestimmte DLL, das zeigt dieses Problem und ich habe festgestellt, dass mit ILMerge gebaut wird. Vielleicht ist dies das Problem verursacht. Nur um klar zu sein:. Die DLL, die von ILMerge erzeugt wird, um die richtigen Metadaten haben, nur nach Zerlegen und Zusammenbauen es, die Metadaten verschwinden

UPDATE 2

öffnete ich die DLL in Reflector und es scheint, dass die Versionsnummer zumindest noch da ist. Ich war die Überprüfung der Dateieigenschaften mit dialog / Details Registerkarte in Windows Explorer die ganze Zeit. Also ich meine, es ist offensichtlich, dass fehlt statt.

War es hilfreich?

Lösung

Ich frage mich, warum dies geschieht. Ich habe ziemlich gute Erfahrung in der Round-Trip-Kompilierung mit ilasm und ildasm auf unsigned und unterzeichnete Baugruppen ebenfalls. Können Sie die Metadaten Ausgabe von ILASM noch enthält die Versionsinformationen (Unterseite des Montage scope) überprüfen:

.assembly ConsoleApplication1
{
  //...
  .hash algorithm 0x00008004
  .ver 1:0:0:0
} 

So überprüfte wieder, es „funktioniert auf meinem Rechner“ (genau die gleichen Kommandozeilen-Schalter, wie Sie getan haben).

Was wird tatsächlich verloren ist die Fileversion Attribut (die Sie in den Fenstern zu sehen Explorer, wenn über die Versammlung schwebt. Die Assembly Attribut ist noch vorhanden und richtig . Könnte es sein, Sie die beiden sind verwirrend? Nur die AssemblyVersion für verbindliche Informationen wichtig ist. sehen Sie diese SO Post für weitere Informationen.

Hope konnte ich helfen, sonst würden Sie mehr Kontext zur Verfügung stellen müssen.

Andere Tipps

Wenn Sie den Quellcode haben, dann neu kompiliert nur die Bibliotheken mit starken Namen -. Zerlegen und Zusammenbauen der Regel ziemlich gut funktioniert, aber es ist immer noch ein Hack

Um Abhängigkeiten zwischen den Bibliotheken zu halten arbeitet, müssen Sie die Referenzen in dem .il Code aktualisieren, um die öffentlichen Schlüssel der Montage verwenden sie verweisen, sonst werden sie versuchen, eine nicht signierte Version der Assembly zu verweisen und damit scheitern es zur Laufzeit zu laden.

Sie können dies tun, mit der Hand, aber es wird sehr mühsam nach 2 oder 3 Baugruppen. Eine schnelle Lösung dafür ist, signer , die sich mit vielen Schwierigkeiten für Sie beteiligt sind, und tut ein gute Arbeit geleistet -. es ist in der Regel ziemlich schnell und sauber

(Beachten Sie, dass gegen eine alte .NET-Version derzeit gebaut es ist. Wenn Sie C # 4 / .NET 4 Baugruppen verwenden Sie benötigen die Quelle herunterladen, ändern .NET 4 zum Ziel und wieder aufzubauen es zu erhalten signer.exe das wird .NET 4 Baugruppen richtig handhaben).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top