Introducere
Această postare arată cum să înlocuiți toate fișierele .exe + .dll
cu un singur combinat .exe
. De asemenea, păstrează intact fișierul .pdb
de depanare.
Pentru aplicațiile Console
Aici este elementul de bază Post Build String
pentru Visual Studio 2010 SP1, folosind .NET 4.0. Construiesc o consolă .exe cu toate fișierele sub-.dll incluse în ea.
"$(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
Sugestii de bază
- Ieșirea este un fișier "
AssemblyName.all.exe
" care combină toate subdll-urile într-un .exe.
- Observați directorul
ILMerge \
. Trebuie fie să copiați utilitarul ILMerge în directorul de soluții (astfel încât să puteți distribui sursa fără să vă faceți griji cu privire la documentarea instalării ILMerge), fie să schimbați această cale pentru a indica locul în care se află ILMerge.exe.
Sugestii avansate
Dacă aveți probleme cu faptul că nu funcționează, activați Output
și selectați Show output from: Build
. Verificați comanda exactă pe care Visual Studio a generat-o și verificați erorile.
Sample Build Script
Acest script înlocuiește toate fișierele .exe + .dll
cu un singur combinat .exe
. De asemenea, păstrează fișierul .pdb de depanare intact.
Pentru a utiliza această opțiune, plasați-o în pasul Postați postarea
, sub fila Build Events
într-un proiect C# și asigurați-vă că ajustați calea din prima linie pentru a indica < code> 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