c#/helper

c# Deterministic 결정적 어셈블리 생성

AUSTAR 2024. 4. 24. 00:05

C# 프로젝트 설정 파일에 들어가는 옵션 중 하나로 해당 옵션이 true가 된다면 변경 사항이 없을 경우 새로 컴파일러를 통해 빌드를 할 경우에도 기존에 생성된 어셈블리와 동일한 파일이 생성되는 옵션이다.

 <Deterministic> 옵션을 사용하여 결정적 어셈블리를 생성하고, 입력이 동일하게 유지되는 한 해당 이진 콘텐츠가 컴파일 간에 동일합니다.

 

다음과 같은 설명으로 마이크로 소프트 공식 설명에 기제되어 있으며 해당 결정적 옵션을 사용하지 않을 경우 타임스탬프 및 MVID 필드를 사용하여 어셈블리를 생성하기 때문에 수정이 없는 파일을 다시 빌드하여 생성할 경우 기존 파일과 다른 이진 콘텐츠가 생성된다.

<Deterministic>true</Deterministic>

 

옵션 태그는 다음과 같이 적용하면 되며 프로젝트 설정 파일에는 다음과 같이 적용되면 된다.

 

PropertyGroup 태그 마지막 부분을 확인하면 해당 결과물의 적용을 알 수 있다.

 

<Project Sdk="Microsoft.NET.Sdk">

	<PropertyGroup>
		<!-- 빌드시 출력물-->
		<OutputType>WinExe</OutputType>
		<!-- .net 버전 설정-->
		<TargetFramework>net8.0-windows</TargetFramework>
		<!-- null 허용 경고 여부 -->
		<Nullable>enable</Nullable>
		<!--암시적 global using 지시문을 사용 및 사용하지 않도록 설정-->
		<ImplicitUsings>enable</ImplicitUsings>
		<!-- WPF 사용 설정-->
		<UseWPF>true</UseWPF>
		<!--결정적 어셈블리를 생성내용 변경이 없는 한 이진 콘텐츠가 동일하게 유지된다. -->
		<Deterministic>true</Deterministic>
	</PropertyGroup>
</Project>

 


참고 사이트

https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/compiler-options/code-generation#deterministic

 

C# 컴파일러 옵션 - 코드 생성 옵션 - C#

코드 생성을 제어하는 C# 컴파일러 옵션입니다. 옵션은 지정된 컴파일에 대해 컴파일러가 생성한 코드에 영향을 줍니다.

learn.microsoft.com