1. 서론
C# 컴파일러 옵션 중 ProduceReferenceAssembly 옵션이 존재하며 해당 옵션은 컴파일러가 참조 어셈블리를 생성하는지에 대한 여부를 제어한다.
제어에 대한 값은 true, false 를 사용할 수 있다.
참조 어셈블리를 사용하는 이유와 사용했을 때의 이점과 사용하지 않았을 때의 이점을 알아보도록 하자.
2. 본론
2-1. 참조 어셈블리란?
ms 문서에 따르면 참조 어셈블리(reference assembly)는 라이브러리의 공용 API 화면을 나타내는 데 필요한 최소한의 메타데이터만 포함하는 특수한 형식의 어셈블리라고한다.
따라서 참조 어셈블리는 실행 가능한 코드나 내부 구현을 포함하지 않고 API에 대한 정보를 가지고 있으며 참조 어셈블리의 메타 데이터는 다음 정보를 유지한다고 한다.
- 비공개 및 중첩 형식을 포함한 모든 형식.
- 모든 특성(내부 특성인 경우에도 해당).
- 모든 가상 메서드.
- 명시적 인터페이스 구현.
- 명시적으로 구현된 속성 및 이벤트.
- 구조체의 모든 필드.
2-2. 참조 어셈블리를 사용했을 경우 이점
<ProduceReferenceAssembly>true</ProduceReferenceAssembly>
1. 라이브러리 API 변경점에 대한 안전성 보장
내가 Nuget 등을 이용하여 외부 라이브러리를 사용할 때 해당 라이브러리의 개발자가 내부 로직을 개선하거나 변경할 경우 API 서명(함수나 메소드의 이름, 반환 타입, 매개변수의 수와 타입)이 변경하지 않지만 라이브러리의 함수나 메소드의 이름, 반환 타입, 매개변수의 수와 타입 등이 변경 될 경우 API 서명이 변경되기에 변경되기 이전의 API 서명을 가지해 프로젝트의 라이브러리 버전이 유지되기에 API에 대한 안전성을 보장할 수 있다.
2. 대규모 솔루션의 빌드 시간 단축
대규모 솔루션에서 여러 프로젝트가 서로 참조하는 경우, 참조 어셈블리를 사용하여 불필요한 재빌드 시간을 단축 시킬 수 있다고 한다.
또한 참조된 프로젝트의 API 서명이 변경되지 않은 경우 해당 빌드를 재 빌드할 필요가 없으므로 더 효율적인 빌드를 할 수 있다고 한다.
2-3. 참조 어셈블리를 사용하지 않을 경우.
<ProduceReferenceAssembly>false</ProduceReferenceAssembly>
소규모 프로젝트나 단일 개발자일 경우 관리가 굳이 필요치 않을 때 프로젝트 설정을 간소화 시킬 수 있다.
정도로 생각된다.
3. 결론
참조 어셈블리를 사용했을 경우 빌드 효율성 향상, API 안전성 보장, 라이브러리 호환성 유지 등의 이점을 제공하기 때문에 일정 규모 이상의 큰 프로젝트나 여러 프로젝트간의 의존성이 많은 경우 해당 옵션을 사용하는 것이 좋을 것 같다.
참조 사이트
C # 컴파일러 옵션 - 출력 옵션 - C#
컴파일러 출력을 제어하는 C# 컴파일러 옵션입니다. 이러한 옵션은 컴파일에서 어셈블리 생성을 제어합니다.
learn.microsoft.com
https://learn.microsoft.com/ko-kr/dotnet/standard/assembly/reference-assemblies
참조 어셈블리 - .NET
라이브러리의 공용 API 화면만 포함하는 .NET에서 특수한 형식의 어셈블리인 참조 어셈블리에 대해 알아봅니다.
learn.microsoft.com
'c# > helper' 카테고리의 다른 글
| c# Deterministic 결정적 어셈블리 생성 (0) | 2024.04.24 |
|---|---|
| c# PackageOutputPath Nuget 패키지 경로 설정 (0) | 2024.04.23 |
| c# AppendRuntimeIdentifierToOutputPath 옵션 (0) | 2024.04.23 |
| c# AppendTargetFrameworkToOutputPath 옵션 (0) | 2024.04.23 |
| c# BaseOutputPath 빌드 후 출력 경로 설정 (0) | 2024.04.23 |