ILMerge рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд┐рдВрдЧрд▓ рдлрд╛рдЗрд▓ рдореЗрдВ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реАрдЬрд┐рдП

app.exe, d1.dll d2.dll = app.exe рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛, рд╕рд╛рде рд╣реА рдЗрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛ (рд╕рдВрджрд░реНрднрд┐рдд рдЕрд╕реЗрдВрдмрд▓реА) рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрднреА-рдХрднреА рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓, рдПрдХ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓, рдЕрдиреНрдп рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЬрд┐рд╕реЗ рдХрд╣реАрдВ рднреА рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг

рдЗрд╕рдХреЗ рдмрд╛рдж рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдмреЛрд▓рдирд╛:
     рд╕рдВрдХрд▓рди рдХрд░реЗрдВ App \ App.csproj  
     dir App \ bin \ рд░рд┐рд▓реАрдЬрд╝ 
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ:
     App.exe
     dep1.dll
     dep2.dll 
рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЖрддреНрдордирд┐рд░реНрднрд░ рдХреА рдЬрд░реВрд░рдд рд╣реИ
     App.exe 
рд╡рд╣ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ dep1.dll рдФрд░ dep2.dll

рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИрдмреЗ рдкрд░ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ , рдпрд╣рд╛рдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ ILMerge рдФрд░ рдкреЛрд╕реНрдЯ рдмрд┐рд▓реНрдб рдЗрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВред


рд╕реНрд░реЛрдд рдХреЛрдб
рдЙрдкрдХрд░рдг

ILMerge - рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд░рд┐рд╕рд░реНрдЪ рдХрд╛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо, рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред
merge_all.bat - рд╣рдо рдЗрд╕реЗ рдкреЛрд╕реНрдЯ-рдмрд┐рд▓реНрдб рдИрд╡реЗрдВрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рдЯреНрд░реЗрдирд┐рдВрдЧ

ILMerge рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВред
%PROGRAMFILES%\ILMerge\ILMerge.exe рдХреЛ рдлрд╝реЛрд▓реНрдбрд░ ${SolutionDir}ILMerge\ %PROGRAMFILES%\ILMerge\ILMerge.exe рдореЗрдВ %PROGRAMFILES%\ILMerge\ILMerge.exe
рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░, рдорд░реНрдЬ_рдЕрд▓реИрдЯ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ
[рдкреНрд░реЛрдЬреЗрдХреНрдЯ-> рдЧреБрдг-> рдмрд┐рд▓реНрдб рдИрд╡реЗрдВрдЯ-> рдкреЛрд╕реНрдЯ-рдмрд┐рд▓реНрдб рдИрд╡реЗрдВрдЯ] рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ:
"$(SolutionDir)\ILMerge\merge_all.bat" "$(SolutionDir)" "$(TargetPath)" $(ConfigurationName)

рд╕рд╛рдордЧреНрд░реА рдорд░реНрдЬ рдХрд░реЗрдВ

$ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рд╕рднреА рд╡рд┐рдзрд╛рдирд╕рднрд╛рдПрдВ рдПрдХ рдореЗрдВ рд╡рд┐рд▓реАрди рд╣реЛ рдЬрд╛рдПрдВрдЧреАред рдпрджрд┐ рдбрд┐рдмрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди $ рдЖрдЙрдЯрдкреБрдЯ \ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╣реИ, рддреЛ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдиреЗ рдкрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк $ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реЛрдЧреАред рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╡рд┐рд▓рдп рдХреИрд╕реЗ рд╣реБрдЖ рдФрд░ рдХрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреА рдЧрдИред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╕рдордЭрд╛рддреА рд╣реИрдВ рдХрд┐ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрд╛ рд╡рд┐рдХрд▓реНрдк .NET 4 рд╣реИред

 @ECHO OFF rem # set .NET version and output folder name set net="v4, C:\Windows\Microsoft.NET\Framework\v4.0.30319" set output=Output rem # process arguments set ILMergeSolution=%1ILMerge\ILMerge.exe rem # determine programm files of x86 for 32 and 64 Platform IF EXIST "%PROGRAMFILES(x86)%" set prorgammFiles=%PROGRAMFILES(x86)% IF NOT EXIST "%PROGRAMFILES(x86)%" set prorgammFiles=%PROGRAMFILES% rem # if ILMerge.exe not in the $(SolutionDir)ILMerge\ rem # then try to use installed in prorgammFiles IF EXIST %ILMergeSolution% set ILMerge="%ILMergeSolution%" IF NOT EXIST %ILMergeSolution% set ILMerge=%prorgammFiles%\Microsoft\ILMerge\ILMerge.exe set target_path=%2 set target_file=%~nx2 set target_dir=%~dp2 set ConfigurationName=%3 rem # set output path and result file path set outdir=%target_dir%%output% set result=%outdir%\%target_file% rem # print info @echo Start %ConfigurationName% Merging %target_file%. @echo Target: %target_path% @echo target_dir: %target_dir% @echo Config: %ConfigurationName% rem # recreate outdir IF EXIST "%outdir%" rmdir /S /Q "%outdir%" md "%outdir%" rem # run merge cmd @echo Merging: '"%ILMerge%" /wildcards /targetplatform:%net% /out:"%result%" %target_path% "%target_dir%*.dll"' "%ILMerge%" /wildcards /targetplatform:%net% /out:"%result%" %target_path% "%target_dir%*.dll" rem # if succeded IF %ErrorLevel% EQU 0 ( rem # clear real output folder and put there result assembly IF %ConfigurationName%==Release ( del %target_dir%*.* del %target_dir%*.dll del %target_dir%*.pdb del %target_dir%*.xml del %target_dir%*.* copy %result% %target_dir% rmdir /S /Q %outdir% set result=%target_path% @echo Result: %target_file% "-> %target_path%" ) ELSE ( @echo Result: %target_file% "-> %result%" ) set status=succeded set errlvl=0 ) ELSE ( set status=failed set errlvl=1 ) @echo Merge %status% exit %errlvl% 


рдпреБрдкреАрдбреА:
рд▓рд╛рдЗрд╕реЗрдВрд╕

ILMerge рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ:
рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ:
ILMerge рдХреЗ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреА рднрд╛рд╖рд╛ рдиреЗ рдХрдИ рд╕рд╡рд╛рд▓ рдЙрдард╛рдП рд╣реИрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдкреБрдирд░реНрд╡рд┐рддрд░рдг рдирд╣реАрдВ рд╣реИред рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рдкрдврд╝реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдирд╣реАрдВ рд╣реВрдВ (рдФрд░ рди рд╣реА рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ!) рдПрдХ рд╡рдХреАрд▓ред

рдпрд╣реА рд╣реИ, рдЖрдк рдЗрд╕реЗ рдЕрд╕реЗрдВрдмрд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рдж рдХреЗ рд╕рд╛рде рд╡рд┐рддрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдорд░реНрдЬ рдХрд┐рдП рдЧрдП dll рдХреЗ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЦреБрд▓рд╛ рд╕рд╡рд╛рд▓ рдмрдирд╛ рд░рд╣рд╛ред

рд╡рд┐рдкрдХреНрд╖

рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЙрдкрдХрд░рдг

рд╕рдВрдмрдВрдзрд┐рдд рд╕рд╛рдордЧреНрд░реА

Source: https://habr.com/ru/post/In126089/


All Articles