.NET에서는 정적 라이브러리 라는 것이 없어서 외부 라이브러리를 사용하면 실행파일을 동작 시키기 위해서는 해당 라이브러리의 DLL이 필요해서 프로젝트를 빌드하면 실행파일과 사용한 라이브러리의 DLL에 같이 생성된다.

 

ILMerge 라는 툴을 사용하면 DLL을 실행파일과 묶어서 하나의 파일로 만들 수 있다.

 

ILMerge 다운로드: http://www.microsoft.com/en-us/download/details.aspx?id=17630

 

 

사용방법

ILMerge를 설치한 후 다음의 명령어로 exe DLL을 하나로 묶는다.

C:\Program Files\Microsoft\ILMerge\ILMerge /out:hoge_merge.exe hoge.exe piyo.dll foo.dll

/out: 에 출력 파일 이름을 지정한다. 다음 인수로는 묶고 싶은 exe, dll 파일 명을 지정한다(위에서는 hoge.exe piyo.dll foo.dll).

 

와일드카드로 파일 명 지정

인수로 넘기는 파일 명을 와일드카드(*)로 지정하고 싶다면 /wildcards를 지정한다.

C:\Program Files\Microsoft\ILMerge\ILMerge /wildcards /out:hoge_merge.exe hoge.exe *.dll

 

 

Visual C#에서 빌드 후 자동으로 파일 묶기

프로젝트 속성에서 '빌드 이벤트' '빌드 후 실행하는 커맨드 라인'에 다음 내용을 추가한다.

set fname_new=$(TargetName)_merge$(TargetExt)

C:\Program Files\Microsoft\ILMerge\ILMerge /wildcards /out:%fname_new% $(TargetFileName) *.dll

 

$(TargetName) … 애플리케이션 어셈블리 명

$(TargetExe) … 확장자(.exe

$(TargetFileName) … 출력 되는 실행 파일 명

 

아래와 같이 새로 만든 파일(실행 파일과 DLL이 합친)과 원래 파일 명이 같으면 디버그가 제대로 동작하지 않는다.

set fname_bk=$(TargetName)_bk$(TargetExt)

move $(TargetFileName) %fname_bk%

C:\Program Files\Microsoft\ILMerge\ILMerge /wildcards /out:$(TargetFileName) %fname_bk% *.dll

 

 

GUI 툴도 있다. http://sourceforge.net/projects/gilma/files/

 

 

참고: http://qiita.com/krsak/items/75a257cc0866a7e8e4aa

 

저작자 표시
신고
by 흥배 2014.06.23 08:00
| 1 |

티스토리 툴바