.NET: Externe Dateien wie .dll’s in .exe integrieren

Beim Schreiben von Programmen nutzt man fast immer externe Dateien wie zum Beispiel .dll Dateien. Ist das Programm dann als .exe released brauch es die .dll um zu funktionieren.
Es gibt mindestens 3 Möglichkeiten, dieses Problem zu umgehen. Uns interessiert jetzt nur der leichteste und geilste Weg:

ILMerge nennt sich das Microsoft Tool, dass es erlaubt, verschiedene .NET Projektdateien zu einer Datei zusammenzuführen. Das Tool ist kommandozeilenbasiert und kommt daher nur als single .exe. Es gibt zwar GUIs für ILMerge aber die Handhabung ist denkbar einfach. Auch wenn die, im Download beiliegende, Dokumentation das nicht vermuten lässt.

Kopiert ILMerge(.exe), eure Projekt .exe und alle externen Dateien, die integriert werden sollen, in ein Verzeichnis. CMD auf und los:

ilmerge /out:Final.exe Projekt.exe ExternFunctions.dll ExternData.dll

Und schon liegt in dem Verzeichnis eine Final.exe, die allein funktionstüchtig ist. Einfacher gehts gar nicht!

8 Kommentare

  1. hallo,
    sorry wenn meine Frage das Thema nur bedingt trifft:
    Ich benutze VB2008 express und habe festgestellt, das beim Verteilen der Anwendung alle nötigen dlls im Verzeichnis der Anwendung und nicht mehr in system32 sind. Warum ist das eigentlich so und kann man auch wieder system32 nutzen?
    Hintergrund meiner Frage ist, wenn dlls von mehreren Anwendungen genutzt werden, werden sie im Falle eines Updates nur an einer Stelle upgedated und alle anderen Anwendungen bekommen das Update gar nicht mehr mit

    Vorab schonmal Danke

  2. Etwas funzt bei mir nicht…

    Meine CMD-Ausgabe (nach dem Befehl):

    An exception occurred during merging:
    IlMerge.Merge: Could not load assembly from the Location ‚C:\MeinVerzeichnis\MeineEXE.exe‘. Skipping and processing rest of arguments.
    bei ILMerging.ILMerge.Merge()
    bei ILMerging.ILMerge.Main(String[] args)

    Kann es sein, dass es nicht mit allen DLLs oder EXE funktioniert?

    Danke für eine Antwort!

Schreibe einen Kommentar