Costura.Fody 소개 및 사용 방법
Costura.Fody 소개
Costura.Fody는 .NET 애플리케이션에서 사용되는 모든 종속성을 하나의 실행 파일에 병합하여 배포할 수 있게 해주는 도구입니다. 이 도구는 Fody라는 IL(Intermediate Language) 위빙 프레임워크를 활용해 애플리케이션 실행 파일이 참조하는 모든 외부 DLL 파일을 하나의 EXE 파일로 병합합니다. 이를 통해 배포가 간소화되며, 파일 수를 줄여 더 편리한 배포가 가능합니다. Costura.Fody는 WPF 및 WinForms와 같은 데스크톱 애플리케이션에서 유용하게 사용되며, 배포 패키지에 포함된 DLL 파일들을 감출 수 있어 배포 효율성과 보안성을 높이는 데 기여합니다.
주요 기능
- 종속성 병합: 외부 라이브러리 및 종속성을 단일 EXE 파일로 병합
- 간편한 배포: DLL 파일을 따로 배포할 필요 없이 하나의 파일로 전체 애플리케이션 배포 가능
- 통합된 Fody 지원: Fody 프레임워크의 IL 위빙 기능을 사용하여 종속성을 실행 파일로 삽입
장점과 단점
장점
- 배포 간소화: 모든 DLL 파일이 하나의 EXE 파일로 병합되어 배포가 간편해집니다.
- 파일 보안: DLL 파일을 감춰 라이브러리의 노출을 줄이고, 배포 파일의 무결성을 유지합니다.
- 설정 용이:
FodyWeavers.xml파일을 통해 손쉽게 설정할 수 있으며, 종속성 병합이 자동화됩니다.
단점
- 파일 크기 증가: 모든 종속성이 단일 파일에 포함되므로 EXE 파일의 크기가 커질 수 있습니다.
- 디버깅 어려움: 병합된 파일은 디버깅이 어렵고, 종속성을 분리하여 문제를 해결하는 데 시간이 걸릴 수 있습니다.
- 특정 DLL 비호환성: 일부 특수한 DLL 파일이나 네이티브 라이브러리는 병합 과정에서 문제가 발생할 수 있습니다.
설치 방법
Costura.Fody는 NuGet 패키지로 설치할 수 있습니다. 패키지 관리 콘솔 또는 명령어 프롬프트에서 다음 명령어를 사용해 설치할 수 있습니다.
dotnet add pacakge costura.fody또는 Visual Studio의 NuGet 패키지 관리에서 Costura.Fody를 검색하여 설치할 수 있습니다.
사용법
Costura.Fody는 설치 후 기본적으로 별도의 코드 변경 없이 FodyWeavers.xml 파일을 통해 구성됩니다. 프로젝트에 포함된 모든 종속성을 자동으로 병합합니다.
FodyWeavers.xml 파일 설정
Costura.Fody를 사용하려면 프로젝트 루트에 FodyWeavers.xml 파일을 추가해야 합니다. 이 파일은 Costura.Fody의 구성을 지정하며, 병합할 라이브러리와 옵션을 설정합니다.
<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
<Costura />
</Weavers>구성 옵션
Costura.Fody는 다양한 설정 옵션을 지원합니다. FodyWeavers.xml 파일에서 이러한 옵션을 설정할 수 있습니다.
- IncludeAssemblies: 병합할 특정 어셈블리를 지정합니다.
<Costura>
<IncludeAssemblies>
<AssemblyName1 />
<AssemblyName2 />
</IncludeAssemblies>
</Costura>- ExcludeAssemblies: 병합에서 제외할 어셈블리를 지정합니다.
<Costura>
<ExcludeAssemblies>
<SomeAssembly />
</ExcludeAssemblies>
</Costura>- Unmanaged32Assemblies / Unmanaged64Assemblies: 32비트 또는 64비트의 언매니지드(네이티브) 라이브러리를 병합할 수 있습니다.
<Costura>
<Unmanaged32Assemblies>
<NativeLibrary32 />
</Unmanaged32Assemblies>
<Unmanaged64Assemblies>
<NativeLibrary64 />
</Unmanaged64Assemblies>
</Costura>- DisableCompression: 종속성을 병합할 때 기본적으로 사용하는 압축을 비활성화할 수 있습니다.
<Costura>
<DisableCompression>true</DisableCompression>
</Costura>Trouble Shooting
Fody가 정상적으로 동작되지 않는다면, 다음의 사항을 확인해 볼 수 있습니다.
- 먼저 빌드 로그를 확인합니다.
오후 5:52에 다시 빌드를 시작함...
1>------ 모두 다시 빌드 시작: 프로젝트: DLLTest, 구성: Debug Any CPU ------
C:\Users\YSY\source\repos\DLLTest\DLLTest\DLLTest.csproj을(를) 50밀리초 동안 복원했습니다.
1>MSBUILD : warning FodyPackageReference: Fody: The package reference for Costura.Fody is missing the 'compile' part in the IncludeAssets setting; it's recommended to completely remove IncludeAssets
1>DLLTest -> C:\Users\YSY\source\repos\DLLTest\DLLTest\bin\Debug\net8.0\DLLTest.dll
1>"DLLTest.csproj" 프로젝트를 빌드했습니다.
========== 모두 다시 빌드: 1 성공, 0 실패, 0 건너뛰기 ==========- 위와 같이
1>MSBUILD : warning FodyPackageReference:로 시작하는 로그가 남았다면,.csproj파일을 열고IncludeAssets항목을 제거합니다. - 변경 전
<PackageReference Include="costura.fody" Version="5.7.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>- 변경 후
<PackageReference Include="costura.fody" Version="5.7.0">
<PrivateAssets>all</PrivateAssets>
</PackageReference>