프로젝트 파일에서 어셈블리 특성 설정

MSBuild 속성을 사용하여 패키지 관련 프로젝트 속성을 생성된 코드 파일의 어셈블리 특성으로 변환할 수 있습니다. 또한 MSBuild 항목을 사용하여 생성된 파일에 임의의 어셈블리 특성을 추가할 수 있습니다.

어셈블리 특성으로 패키지 속성 사용

GenerateAssemblyInfo MSBuild 속성은 프로젝트의 AssemblyInfo 특성 생성을 제어합니다. GenerateAssemblyInfo 값이 true(기본값)이면 패키지 관련 프로젝트 속성이 어셈블리 특성으로 변환됩니다. 다음 표에는 특성을 생성하는 프로젝트 속성이 나열되어 있습니다. 또한 특성별로 해당 생성 기능을 해제하는 데 사용할 수 있는 속성도 나열되어 있습니다. 예를 들면 다음과 같습니다.

<PropertyGroup>
  <GenerateNeutralResourcesLanguageAttribute>false</GenerateNeutralResourcesLanguageAttribute>
</PropertyGroup>
MSBuild 속성 Assembly 특성 특성 생성을 해제하는 속성
Company AssemblyCompanyAttribute GenerateAssemblyCompanyAttribute
Configuration AssemblyConfigurationAttribute GenerateAssemblyConfigurationAttribute
Copyright AssemblyCopyrightAttribute GenerateAssemblyCopyrightAttribute
Description AssemblyDescriptionAttribute GenerateAssemblyDescriptionAttribute
FileVersion AssemblyFileVersionAttribute GenerateAssemblyFileVersionAttribute
InformationalVersion AssemblyInformationalVersionAttribute GenerateAssemblyInformationalVersionAttribute
Product AssemblyProductAttribute GenerateAssemblyProductAttribute
AssemblyTitle AssemblyTitleAttribute GenerateAssemblyTitleAttribute
AssemblyVersion AssemblyVersionAttribute GenerateAssemblyVersionAttribute
NeutralLanguage NeutralResourcesLanguageAttribute GenerateNeutralResourcesLanguageAttribute

해당 설정에 대한 참고 사항:

  • AssemblyVersionFileVersion은 기본적으로 접미사가 없는 $(Version) 값으로 설정됩니다. 예를 들어 $(Version)1.2.3-beta.4인 경우 값은 1.2.3입니다.
  • InformationalVersion은 기본적으로 $(Version) 값으로 설정됩니다.
  • $(SourceRevisionId) 속성이 있는 경우 InformationalVersion에 추가됩니다. 해당 동작은 IncludeSourceRevisionInInformationalVersion을 사용하여 사용하지 않도록 설정할 수 있습니다.
  • CopyrightDescription 속성도 NuGet 메타데이터에 사용됩니다.
  • 기본값이 DebugConfiguration은 모든 MSBuild 대상과 공유합니다. dotnet 명령의 --configuration 옵션(예: dotnet pack)을 통해 설정할 수 있습니다.
  • 일부 속성은 NuGet 패키지를 만들 때 사용됩니다. 자세한 내용은 패키지 속성을 참조하세요.

임의 특성 설정

생성된 파일에 자체 어셈블리 특성을 추가할 수도 있습니다. 이렇게 하려면 SDK에 만들 특성의 유형을 알려주는 <AssemblyAttribute> MSBuild 항목을 정의합니다. 이러한 항목에는 해당 특성에 필요한 생성자 매개 변수도 포함되어야 합니다. 예를 들어 System.Reflection.AssemblyMetadataAttribute 특성에는 다음 두 문자열을 사용하는 생성자가 있습니다.

  • 임의 값을 설명하는 이름
  • 저장할 값

MSBuild에 어셈블리가 생성된 날짜가 포함된 Date 속성이 있는 경우 AssemblyMetadataAttribute를 사용하여 다음 MSBuild 코드와 같이 해당 날짜를 어셈블리 특성에 포함할 수 있습니다.

<ItemGroup>
  <!-- Include must be the fully qualified .NET type name of the Attribute to create. -->
  <AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute">
    <!-- _Parameter1, _Parameter2, etc. correspond to the
        matching parameter of a constructor of that .NET attribute type -->
    <_Parameter1>BuildDate</_Parameter1>
    <_Parameter2>$(Date)</_Parameter2>
  </AssemblyAttribute>
</ItemGroup>

이 항목은 .NET SDK에 다음 C#(또는 동등한 F# 또는 Visual Basic)을 어셈블리 수준 특성으로 내보내도록 지시합니다.

[assembly: System.Reflection.AssemblyMetadataAttribute("BuildDate", "01/19/2024")]

(실제 날짜 문자열은 빌드 시 제공한 문자열입니다.)

.NET Framework에서 마이그레이션

.NET Framework 프로젝트를 .NET 6 이상으로 마이그레이션하는 경우 중복 어셈블리 정보 파일과 관련된 오류가 발생할 수 있습니다. 이는 .NET Framework 프로젝트 템플릿에서 어셈블리 정보 특성이 설정된 코드 파일을 만들기 때문입니다. 이 파일은 일반적으로 .\Properties\AssemblyInfo.cs 또는 .\Properties\AssemblyInfo.vb에 있습니다. 그러나 SDK 스타일 프로젝트도 프로젝트 설정에 따라 이 파일을 생성합니다.

.NET 6 이상으로 코드를 이동할 때 다음 중 하나를 수행하세요.

  • 프로젝트 파일에서 GenerateAssemblyInfofalse로 설정하여 어셈블리 정보 특성을 포함하는 임시 코드 파일 생성을 비활성화합니다. 이렇게 하면 AssemblyInfo 파일을 유지할 수 있습니다.
  • AssemblyInfo 파일의 설정을 프로젝트 파일로 마이그레이션한 다음 AssemblyInfo 파일을 삭제합니다.