프로젝트를 처음 만들 때 가장 광범위한 사용 프로젝트와 호환성을 제공하므로 .NET Standard 클래스 라이브러리를 만드는 것이 좋습니다. .NET Standard를 사용하여 기본적으로 .NET 라이브러리에 플랫폼 간 지원을 추가합니다. 그러나 일부 시나리오에서는 특정 프레임워크를 대상으로 하는 코드를 포함해야 할 수도 있습니다. 이 문서에서는 SDK 스타일 프로젝트에 대해 이 작업을 수행하는 방법을 보여줍니다.
SDK 스타일 프로젝트의 경우 프로젝트 파일에서 여러 TFM(대상 프레임워크)에 대한 지원을 구성한 다음 패키지를 사용 dotnet pack 하거나 msbuild /t:pack 만들 수 있습니다.
비고
nuget.exe CLI는 SDK 스타일 프로젝트를 패키징하는 것을 지원하지 않으므로 dotnet pack 또는 msbuild /t:pack만 사용해야 합니다. 프로젝트 파일에서 일반적으로 파일에 있는 .nuspec 것이 좋습니다. SDK 스타일이 아닌 프로젝트에서 여러 .NET Framework 버전을 대상으로 지정하려면 여러 .NET Framework 버전 지원을 참조하세요.
여러 .NET Framework 버전을 지원하는 프로젝트 만들기
Visual Studio에서 새 .NET Standard 클래스 라이브러리를 만들거나 사용합니다
dotnet new classlib.최상의 호환성을 위해 .NET Standard 클래스 라이브러리를 만드는 것이 좋습니다.
대상 프레임워크를 지원하도록 .csproj 파일을 편집합니다. 예를 들어 변경
<TargetFramework>netstandard2.0</TargetFramework>to:
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>XML 요소가 단수에서 복수로 변경되었는지 확인합니다(열린 태그와 닫는 태그 모두에 "s"를 추가).
하나의 TFM에서만 작동하는 코드가 있는 경우 TFM 종속 코드를 사용
#if NET45하거나#if NETSTANDARD2_0구분할 수 있습니다. (자세한 내용은 다중 대상을 지정하는 방법을 참조하세요.) 예를 들어 다음 코드를 사용할 수 있습니다.public string Platform { get { #if NET45 return ".NET Framework" #elif NETSTANDARD2_0 return ".NET Standard" #else #error This code block does not match csproj TargetFrameworks list #endif } }.csproj에 원하는 NuGet 메타데이터를 MSBuild 속성으로 추가합니다.
사용 가능한 패키지 메타데이터 및 MSBuild 속성 이름 목록은 팩 대상을 참조하세요. 또한 종속성 자산 제어를 참조하세요.
빌드 관련 속성을 NuGet 메타데이터와 분리하려면 다른
PropertyGroup속성을 사용하거나 다른 파일에 NuGet 속성을 배치하고 MSBuild의Import지시문을 사용하여 포함할 수 있습니다.Directory.Build.Props및Directory.Build.Targets은(는) MSBuild 15.0부터 지원됩니다.이제
dotnet pack를 사용하고 생성된 .nupkg 파일은 .NET Standard 2.0 및 .NET Framework 4.5를 모두 대상으로 합니다.
다음은 이전 단계 및 .NET Core SDK 2.2를 사용하여 생성된 . csproj 파일입니다.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
<Description>Sample project that targets multiple TFMs</Description>
</PropertyGroup>
</Project>