Einführung
Dieser Beitrag zeigt, wie Sie alle .exe + .dll files
durch eine einzige ersetzen können combined .exe
. Außerdem bleibt die Debugging- .pdb
Datei erhalten.
Für Konsolen-Apps
Hier finden Sie die Grundlagen Post Build String
für Visual Studio 2010 SP1 unter Verwendung von .NET 4.0. Ich erstelle eine Konsolen-EXE-Datei mit allen darin enthaltenen Sub-DLL-Dateien.
"$(SolutionDir)ILMerge\ILMerge.exe" /out:"$(TargetDir)$(TargetName).all.exe" "$(TargetDir)$(TargetName).exe" "$(TargetDir)*.dll" /target:exe /targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319 /wildcards
Grundlegende Hinweise
- Die Ausgabe ist eine Datei "
AssemblyName.all.exe
", die alle Unter-DLLs in einer EXE- Datei kombiniert.
- Beachten Sie das
ILMerge\
Verzeichnis. Sie müssen entweder das ILMerge-Dienstprogramm in Ihr Lösungsverzeichnis kopieren (damit Sie die Quelle verteilen können, ohne sich um die Dokumentation der Installation von ILMerge kümmern zu müssen) oder diesen Pfad so ändern, dass er auf ILMerge.exe verweist.
Erweiterte Hinweise
Wenn Sie Probleme damit haben, schalten Sie ein Output
und wählen Sie Show output from: Build
. Überprüfen Sie den genauen Befehl, den Visual Studio tatsächlich generiert hat, und suchen Sie nach Fehlern.
Beispiel für ein Build-Skript
Dieses Skript ersetzt alle .exe + .dll files
durch ein einzelnes combined .exe
. Außerdem bleibt die Debugging-PDF-Datei erhalten.
Fügen Sie dies zur Verwendung in Ihren Post Build
Schritt unter der Build Events
Registerkarte in einem C # -Projekt ein und stellen Sie sicher, dass Sie den Pfad in der ersten Zeile so anpassen, dass er auf Folgendes zeigt ILMerge.exe
:
rem Create a single .exe that combines the root .exe and all subassemblies.
"$(SolutionDir)ILMerge\ILMerge.exe" /out:"$(TargetDir)$(TargetName).all.exe" "$(TargetDir)$(TargetName).exe" "$(TargetDir)*.dll" /target:exe /targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319 /wildcards
rem Remove all subassemblies.
del *.dll
rem Remove all .pdb files (except the new, combined pdb we just created).
ren "$(TargetDir)$(TargetName).all.pdb" "$(TargetName).all.pdb.temp"
del *.pdb
ren "$(TargetDir)$(TargetName).all.pdb.temp" "$(TargetName).all.pdb"
rem Delete the original, non-combined .exe.
del "$(TargetDir)$(TargetName).exe"
rem Rename the combined .exe and .pdb to the original project name we started with.
ren "$(TargetDir)$(TargetName).all.pdb" "$(TargetName).pdb"
ren "$(TargetDir)$(TargetName).all.exe" "$(TargetName).exe"
exit 0