[WPF] 어셈블리를 exe파일에 합치기
2017. 5. 21. 02:43ㆍOthers/C# 일반
WPF프로그램을 빌드하면 관련된 어셈블리(dll)들이 exe파일과 같이 생성됩니다. 이 어셈블리 파일들을 exe파일과 같이 고객PC에 배포해야 프로그램이 정상적으로 동작합니다.
실행에 필요한 어셈블리를 배포하는 방법은 여러가지가 있지만, 여기서는 exe파일에 포함시키는 방법에 대해 소개합니다. 띠리사 exe파일만 배포해도 프로그램이 정상적으로 실행되게 됩니다.
- 먼저 모든 어셈블리를 프로젝트의 폴더에 포함시킵니다. 폴더명은 원하는 폴더명으로 하시면 됩니다.
- 위에서 포함한 모든 어셈블리의 Build Action을 Embedded Resources로 합니다.
- App Class로 이동해 다음과 같이 작성합니다.
public partial class App : Application { public App() { AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ResolveAssembly); } private static Assembly ResolveAssembly(object sender, ResolveEventArgs args) { //어셈블리가 .exe파일과 같은 폴더에 있으면 이 메서드는 호출되지 않습니다. Assembly thisAssembly = Assembly.GetExecutingAssembly(); //1. 어셈블리 이름을 얻습니다. AssemblyName assemblyName = new AssemblyName(args.Name); string name = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll"; //2. Embedded Resources로부터 리소스를 로드합니다. var resources = thisAssembly.GetManifestResourceNames().Where(s => s.EndsWith(name)); if (resources.Any()) { //거의 대부분의 확률로 항상 1개의 항목만 로드됩니다. 만약 1개이상 로드가되면 이러한 케이스를 별도로 처리해야 합니다. var resourceName = resources.First(); using (Stream stream = thisAssembly.GetManifestResourceStream(resourceName)) { if (stream == null) return null; var block = new byte[stream.Length]; stream.Read(block, 0, block.Length); return Assembly.Load(block); } } return null; } }
- 이제 exe 파일만으로 실행되는지 테스트해봅니다.
참고사항
- 이 방법은 WinForm 개발방법에도 적용될 수 있습니다.
- 참고URL: https://www.bbsmax.com/A/1O5Ep8KbJ7/
'Others > C# 일반' 카테고리의 다른 글
[.NET] Framework Profiles in .NET (0) | 2016.03.30 |
---|---|
[C#] Portable Class Library (0) | 2016.03.29 |
[Office] 엑셀문서 접근 시 주의사항 (0) | 2015.07.17 |
[C#] Async, Await를 이용한 비동기 프로그래밍 (6) | 2014.03.26 |
[C#] N개의 공백을 하나의 공백으로 치환하기 (1) | 2013.12.27 |