.NET-DLL in EXE packen
Ich habe mit Visual Studio Express ein kleines .NET-Programm geschrieben, das auf einige Windows-Funktionen zugreift, die nicht zum .NET-Framework gehören. Im Release-Verzeichnis liegen jetzt die .EXE und eine „Interop.NETWORKLIST.dll“, ohne die das Programm nicht startet. Ich fände es aber viel praktischer, nur eine Datei zu haben, damit die DLL nicht verloren gehen kann. Geht das? Und woher kommt die DLL überhaupt?
- Björn Hansen
Ich habe mit Visual Studio Express ein kleines .NET-Programm geschrieben, das auf einige Windows-Funktionen zugreift, die nicht zum .NET-Framework gehören. Im Release-Verzeichnis liegen jetzt die .EXE und eine „Interop.NETWORKLIST.dll“, ohne die das Programm nicht startet. Ich fände es aber viel praktischer, nur eine Datei zu haben, damit die DLL nicht verloren gehen kann. Geht das? Und woher kommt die DLL überhaupt?
Eine solche DLL erzeugt Visual Studio automatisch, wenn Sie COM-Objekte aus einer .NET-Anwendung ansprechen. Das erkennen Sie daran, dass Sie beim Hinzufügen des „Verweises“ auf den Reiter „COM“ wechseln, um das Objekt auszuwählen. Die DLL wird vom Import-Tool tlbimp erzeugt.
Wir kennen leider keinen einfachen Weg, stattdessen Quelltext mit derselben Funktion zu erzeugen, den Sie in Ihr Programm einkompilieren könnten. Aber Microsoft stellt das Tool ILMerge zur Verfügung, mit dem Sie (unter anderem) nachträglich DLLs mit in die EXE-Datei stecken können. Im einfachsten Falle rufen Sie es mit den Namen des Programms und der DLL auf und geben mit Hilfe von /out die Zieldatei an:
ilmerge /out:ineins.exe meins.exe Interop.NETWORKLIST.dll
Die zahlreichen anderen Schalter beschreibt das dem Tool beiliegende Word-Dokument.