컴퓨터/c#

c# 단일 실행 파일로 컴파일하기 (ILMerge, Fody)

k1asd1 2021. 1. 22. 16:08
728x90
반응형

이번에 개인적인 프로그램을 개발할 게 있어 작업 도중 자주 쓰이는 메서드나 컨트롤들을 DLL로 따로 관리하게 되었습니다. 그간 혼자 쓰느라 프로그램 배포할 일도 없었고 메서드나 컨트롤들을 프로그램 소스에 그대로 써서 라이브러리를 관리할 일도 없었습니다.

 

여기저기 흩어져있는 메소드나 컨트롤을 한 곳에 모으고 나름 관리를 해보고자 DLL로 구성하였고 이번에 개발하는 프로그램에도 아주 유용하게 적용하였습니다.

 

근데 이걸 컴파일 후 사용자한테 파일을 전달할 때 실행파일과 함께 사용된 DLL들도 같이 전달해야 하는 상황이 발생합니다. 이 파일들을 한 번에 전달하기에 좋은 방법이 없을까 하다 단일 파일로 만들 수 있는 방법들을 알게 되었고 앞으로도 유익하게 활용할 수 있어 기록으로 남기고자 합니다.


* 컴파일 후 참조에 사용된 여러 DLL들

여러 DLL들

- 컴파일 하고나니 위와 같이 여러 파일들이 있습니다.

- 압축해서 줄려니 저도 불편하고 받는 사람도 불편합니다.


* ILMerge

 

https://github.com/dotnet/ILMerge

 

dotnet/ILMerge

ILMerge is a static linker for .NET Assemblies. Contribute to dotnet/ILMerge development by creating an account on GitHub.

github.com

- 관련 내용으로 검색하면 사용 방법도 많고 내용도 많습니다.

- Visual Studio의 Nuget Package에서 사용할 수 있어 매우 편리해 보입니다.


* ILMergeGUI

https://wvd-vegt.bitbucket.io/

 

Swiss Tools Homepage

Homepage --> Swiss Tools Homepage Please support this site and unblock your adblocker

wvd-vegt.bitbucket.io

 

- 다운로드

https://bitbucket.org/wvd-vegt/ilmergegui/downloads/

 

wvd-vegt / ilmergegui / Downloads — Bitbucket

For large uploads, we recommend using the API. Get instructions

bitbucket.org

 

ILMergeGUI

 

- ILMerge의 GUI입니다.

- Portable 버전으로 제공되며 클릭 몇 번으로 쉽게 어셈블리를 통합할 수 있습니다.

- ILMergeGUI의 정상적인 실행을 위해서는 동일한 폴더나 위치에 Nuget Package에서 설치된 'ILMerge.exe'와 'System.Compiler.dll'가 꼭 필요합니다.

 

- 작성일자 기준 최신 ILMerge입니다.

ILMerge 3.0.41.zip
0.30MB

- 전 오류가 계속 발생해서 결국 제대로 활용하지 못했습니다.


** Fody

* 2021.12.17 Fody 6.6.0(현재 최신버전), Costura.Fody 5.7.0(현재 최신버전) 설치 시

  오류 없이 정상 작동합니다.

 


https://github.com/Fody/Fody

 

Fody/Fody

Extensible tool for weaving .net assemblies. Contribute to Fody/Fody development by creating an account on GitHub.

github.com

- Nuget Package에서 설치할 수 있으며 사용방법은 컴파일할 때 자동으로 통합됩니다.

- VisualStudio 2017 Express에서 Fody 최신 버전은 오류가 있어 하위 버전으로 변경 이후 정상 작동합니다.

 

 

 

 

Fody 설치

- 통합을 원하는 프로젝트 -> Nuget 패키지 관리에서 검색 후 'Costura.Fody'를 설치합니다. 안정적인 최신 버전이라기에 믿고 일단 설치했습니다.

 

 

 

Fody 설치

- 'Costura.Fody'를 설치하면 자동으로 Fody 최신 버전이 같이 설치됩니다. 믿었습니다.

 

 

오류 발생

- 진짜로 될까 싶어 컴파일하니 위와 같이 오류가 발생합니다. 여기저기 찾아보니 버전 문제로 확인됩니다.

 

 

Fody 하위 버전 업데이트

- 다시 통합을 원하는 프로젝트 -> Nuget 패키지 관리로 이동 후 이번엔 설치되어 있는 'Fody'를 선택하여 버전 '4.2.1'로 수정하고 업데이트 버튼을 선택합니다.

 

 

 

Fody 하위 버전 업데이트

- 'Fody'의 버전 변경 시 'Costura.Fody' 또한 종속된 버전으로 변경됩니다. (반대로도 가능하겠네요)

 

 

결과

- 'Fody' 버전 변경 후 프로젝트 컴파일 결과 기존에 있었던 DLL은 없고 실행파일 하나만 존재합니다. 단일 실행파일 용량은 기존의 파일들을 합친 용량과 비슷하고 정상적으로 실행됩니다.

 

- 실행파일뿐만 아니라 DLL 컴파일 시에도 적용됩니다.

 

 

이상입니다.

728x90
반응형