c#/helper

c# ProduceReferenceAssembly 참조 어셈블리 생성 여부

AUSTAR 2024. 4. 25. 02:32

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 안전성 보장, 라이브러리 호환성 유지 등의 이점을 제공하기 때문에 일정 규모 이상의 큰 프로젝트나 여러 프로젝트간의 의존성이 많은 경우 해당 옵션을 사용하는 것이 좋을 것 같다.

 

 

참조 사이트

https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/compiler-options/output#producereferenceassembly

 

C # 컴파일러 옵션 - 출력 옵션 - C#

컴파일러 출력을 제어하는 C# 컴파일러 옵션입니다. 이러한 옵션은 컴파일에서 어셈블리 생성을 제어합니다.

learn.microsoft.com

 

https://learn.microsoft.com/ko-kr/dotnet/standard/assembly/reference-assemblies

 

참조 어셈블리 - .NET

라이브러리의 공용 API 화면만 포함하는 .NET에서 특수한 형식의 어셈블리인 참조 어셈블리에 대해 알아봅니다.

learn.microsoft.com