This post originated from an RSS feed registered with .NET Buzz
by -.
Original Post: ILMerge im Einsatz
Feed Title: Norbert Eder - Living .NET
Feed URL: http://feeds.feedburner.com/NorbertEder-Livingnet
Feed Description: Copyright (c)2005, 2006 by Norbert Eder
Mit Hilfe des ILMerge-Tools k��nnen mehrere Assemblies zu einer einzigen Assembly zusammengef��gt werden. Vor allem bei gr����eren Projekten entsteht nicht nur eine einzige ausf��hrbare Datei. Durch die Kapselung der Funktionalit��t in unterschiedliche Bibliotheken werden diese als eigenst��ndige Assemblies abgelegt.
In einigen F��llen kann es nun erw��nscht sein, diese Dateien in eine einzige zusammen zu fassen. Ein Paradebeispiel w��re die Vereinfachung des Deployment-Prozesses, da in diesem Fall lediglich eine "Anwendungsdatei" ber��cksichtigt werden muss (abgesehen von anderen Dateien, Einstellungen, etc. die ausgeliefert werden m��ssen).
Als Beispiel dient eine simple Anwendung, die nur eine Funktionalit��t besitzt: das Multiplizieren zweier Integer-Werte. Daf��r wurde zus��tzlich zur Windows Forms Anwendung eine Klassenbibliothek angelegt. Darin enthalten ist die Klasse Calculator.
Nach einem Build im Release-Modus werden die Dateien ILMergeDemo.exe und IlMergeDemo.Core.dll angelegt. Diese fassen wir nun zu einer einzigen Assembly zusammen. Dies geschieht mit dem folgenden Aufruf:
ILMerge selbst ist eine Konsolen-Anwendung, die mittels Parameter gesteuert werden kann:
/t:filename bzw. /target:filename Hiermit wird eingestellt, ob es sich um eine Windows Anwendung, eine Konsolenanwendung oder eine Klassenbibliothek handelt. Wird dieser Parameter nicht angegeben, entspricht der Ausgabetyp dem Typ der ersten Assembly (Primary Assembly), die der Ausgabe hinzugef��gt wird.
/out:filename Dadurch wird der Name des Ziels angegeben.
/v1 oder /v1.1 oder /v2 Diese Option ist nur bei ILMerge f��r das .NET Framework 2.0 verf��gbar. Damit kann eine Assembly gelinkt werden, die auch unter einer anderen Framework-Version lauff��hig ist.
/log:filename F��r eine automatisierte Verwendung bietet sich der Parameter /log an. Durch ihn kann die Ausgabe des Vorgangs in eine anzugebende Logdatei geschrieben werden. Etwaige Fehler k��nnen dadurch zu einem sp��teren Zeitpunkt gefunden und analysiert werden.
Nat��rlich k��nnen noch weitere Parameter angegeben werden. Diese k��nnen der Dokumentation zu ILMerge entnommen werden (ist im Download enthalten).
Vergleich mittels Reflector for .NET
Sehen wir uns die Beispielanwendung in Lutz Roeder's Reflector for .NET an, sind die beiden Assemblies extra ausgewiesen:
Nach dem Merge-Vorgang ist ersichtlich, dass sich alles in einer einzigen Assembly befindet:
Was passiert mit den Ressourcen?
ILMerge kann Ressourcen nicht zusammenf��hren, sondern lediglich kopieren, was bei der Ausf��hrung auch passiert. Nun kann es bei der Laufzeit der zusammengef��hrten Assembly zu Fehlern kommen. Dies ist beispielsweise dann der Fall, wenn die Ressourcen Referenzen zu Typen kodieren. Diese k��nnen danach nicht mehr aufgel��st werden: Die Referenz verweist auf die urspr��ngliche Assembly, die es nach dem Merge-Vorgang nicht in der "Sammel-Assembly" gibt.
Kann ich ILMerge direkt in ein Projekt einbinden?
Mit Visual Studio 2005 ist es m��glich, ausf��hrbare Assemblies als Referenz einzubinden. Dadurch kann ILMerge.exe in ein anderes Projekt quasi als Klassenbibliothek eingebunden werden.
Weitere Informationen
Kommerzielle Nutzung: Eine kommerzielle Nutzung von ILMerge ist laut Lizenz m��glich.
PDB-Dateien zusammenf��hren: ILMerge kann auch PDB-Dateien (Debug-Informationen und Projektstatus) zusammenf��hren. Hierbei ist zu beachten, dass ILMerge f��r .NET 2.0 nur 2.0er PDB-Dateien zusammenf��hren kann. Jedoch k��nnen Assemblies fr��herer Versionen zusammengef��hrt werden. Mit ILMerge f��r das .NET Framework 1.1 k��nnen auch PDB-Dateien der 1.1er Version zusammengef��hrt werden.
Mono und Rotor: Bis zum aktuellen Zeitpunkt unterst��tzt ILMerge weder Rotor noch Mono.
GUI: F��r ILMerge gibt es zur Erleichterung grafische Oberfl��chen von diversen Anbietern. Eine kostenlose Variante ist NuGenUnify.