.NET Standard.NET Standard

.NET Standard는 여러 .NET 구현에서 사용할 수 있는 .NET API의 공식 규격입니다..NET Standard is a formal specification of .NET APIs that are available on multiple .NET implementations. .NET Standard는 .NET 에코시스템의 통일성을 높이기 위한 것이었습니다.The motivation behind .NET Standard was to establish greater uniformity in the .NET ecosystem. 그러나 .NET 5는 균일성을 설정하는 데 다른 접근 방식을 채택하고 있으며 이 새로운 접근 방식은 많은 시나리오에서 .NET Standard가 필요하지 않습니다.However, .NET 5 adopts a different approach to establishing uniformity, and this new approach eliminates the need for .NET Standard in many scenarios. 자세한 내용은 이 문서 뒷부분의 .NET 5 및 .NET Standard를 참조하세요.For more information, see .NET 5 and .NET Standard later in this article.

.NET 구현체 지원.NET implementation support

다양한 .NET 구현체는 특정 버전의 .NET Standard를 대상으로 합니다.The various .NET implementations target specific versions of .NET Standard. 각 .NET 구현체 버전은 지원하는 최신 .NET Standard 버전을 보급합니다. 이는 이전 버전도 지원함을 의미합니다.Each .NET implementation version advertises the highest .NET Standard version it supports, a statement that means it also supports previous versions. 예를 들어 .NET Framework 4.6에서는 .NET Standard 1.3을 구현합니다. 즉, .NET Standard 버전 1.0에서 1.3까지에 정의된 모든 API를 표시합니다.For example, .NET Framework 4.6 implements .NET Standard 1.3, which means that it exposes all APIs defined in .NET Standard versions 1.0 through 1.3. 마찬가지로 .NET Framework 4.6.1에서는 .NET Standard 1.4를 구현하지만 .NET 5.0에서는 .NET Standard 2.1을 구현합니다.Similarly, .NET Framework 4.6.1 implements .NET Standard 1.4, while .NET 5.0 implements .NET Standard 2.1.

다음 표에서는 각 .NET Standard 버전을 지원하는 최소 구현 버전을 나열합니다.The following table lists the minimum implementation versions that support each .NET Standard version. 즉, 목록에 있는 구현의 차후 버전에서는 해당하는 .NET Standard 버전도 지원합니다.That means that later versions of a listed implementation also support the corresponding .NET Standard version. 예를 들어 .NET Core 2.1 이상 버전은 .NET Standard 2.0 이전 버전을 지원합니다.For example, .NET Core 2.1 and later versions support .NET Standard 2.0 and earlier versions.

.NET Standard.NET Standard 1.01.0 1.11.1 1.21.2 1.31.3 1.41.4 1.51.5 1.61.6 2.02.0 2.12.1
.NET.NET 5.05.0 5.05.0 5.05.0 5.05.0 5.05.0 5.05.0 5.05.0 5.05.0 5.05.0
.NET Core.NET Core 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 2.02.0 3.03.0
.NET Framework 1.NET Framework 1 4.54.5 4.54.5 4.5.14.5.1 4.64.6 4.6.14.6.1 4.6.1 24.6.1 2 4.6.1 24.6.1 2 4.6.1 24.6.1 2 해당 없음3N/A3
MonoMono 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 5.45.4 6.46.4
Xamarin.iOSXamarin.iOS 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.1410.14 12.1612.16
Xamarin.MacXamarin.Mac 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.83.8 5.165.16
Xamarin.AndroidXamarin.Android 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 8.08.0 10.010.0
UWPUniversal Windows Platform 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.0.1629910.0.16299 10.0.1629910.0.16299 10.0.1629910.0.16299 TBDTBD
UnityUnity 2018.12018.1 2018.12018.1 2018.12018.1 2018.12018.1 2018.12018.1 2018.12018.1 2018.12018.1 2018.12018.1 TBDTBD

1 .NET Framework용으로 나열된 버전은 .NET Core 2.0 SDK 이상 버전의 도구에 적용됩니다. 이전 버전에서는 .NET Standard 1.5 이상에서 다른 매핑을 사용했습니다. Visual Studio 2017 이상 버전으로 업그레이드할 수 없는 경우 Visual Studio 2015용 .NET Core 도구를 다운로드할 수 있습니다.1 The versions listed for .NET Framework apply to .NET Core 2.0 SDK and later versions of the tooling. Older versions used a different mapping for .NET Standard 1.5 and higher. You can download tooling for .NET Core tools for Visual Studio 2015 if you cannot upgrade to Visual Studio 2017 or a later version.

2 여기에 나열된 버전은 지정된 .NET Standard 라이브러리를 적용할 수 있는지 여부를 확인하기 위해 NuGet이 사용하는 규칙을 나타냅니다. NuGet에서는 .NET Framework 4.6.1을 .NET Standard 1.5에서 2.0까지 지원하는 것으로 간주하는 반면, .NET Framework 4.6.1에서 해당 버전용으로 빌드된 .NET Standard 라이브러리를 사용하는 데 몇 가지 문제가 있습니다. 이러한 라이브러리를 사용해야 하는 .NET Framework 프로젝트의 경우 .NET Framework 4.7.2 이상을 대상으로 하려면 프로젝트를 업그레이드하는 것이 좋습니다.2 The versions listed here represent the rules that NuGet uses to determine whether a given .NET Standard library is applicable. While NuGet considers .NET Framework 4.6.1 as supporting .NET Standard 1.5 through 2.0, there are several issues with consuming .NET Standard libraries that were built for those versions from .NET Framework 4.6.1 projects. For .NET Framework projects that need to use such libraries, we recommend that you upgrade the project to target .NET Framework 4.7.2 or higher.

3 .NET Framework는 .NET Standard 2.1을 지원하지 않습니다. 자세한 내용은 .NET Standard 2.1의 공지를 참조하세요.3 .NET Framework doesn't support .NET Standard 2.1. For more information, see the announcement of .NET Standard 2.1.

  • 열은 .NET 표준 버전을 나타냅니다.The columns represent .NET Standard versions. 각 헤더 셀은 .NET 표준의 해당 버전에 추가된 API를 보여 주는 문서의 링크입니다.Each header cell is a link to a document that shows which APIs got added in that version of .NET Standard.
  • 행은 다양한 .NET 구현을 나타냅니다.The rows represent the different .NET implementations.
  • 각 셀의 버전 번호는 해당 .NET 표준 버전을 대상으로 지정하는 데 필요한 구현의 최소 버전을 나타냅니다.The version number in each cell indicates the minimum version of the implementation you'll need in order to target that .NET Standard version.
  • 대화형 테이블은 .NET Standard 버전을 참조하세요.For an interactive table, see .NET Standard versions.

대상으로 지정할 수 있는 가장 높은 버전의 .NET Standard를 찾으려면 다음 단계를 수행합니다.To find the highest version of .NET Standard that you can target, do the following steps:

  1. 실행할 .NET 구현체를 나타내는 행을 찾습니다.Find the row that indicates the .NET implementation you want to run on.
  2. 해당 행의 오른쪽에서 왼쪽으로 사용 중인 버전을 나타내는 열을 찾습니다.Find the column in that row that indicates your version starting from right to left.
  3. 열 헤더는 대상에서 지원하는 .NET Standard 버전을 나타냅니다.The column header indicates the .NET Standard version that your target supports. 더 낮은 .NET Standard 버전을 대상으로 할 수도 있습니다.You may also target any lower .NET Standard version. 더 높은 .NET Standard 버전은 구현체도 지원합니다.Higher .NET Standard versions will also support your implementation.
  4. 대상으로 지정할 각 플랫폼에 대해 이 프로세스를 반복합니다.Repeat this process for each platform you want to target. 대상 플랫폼이 두 개 이상 있으면 더 낮은 버전을 선택해야 합니다.If you have more than one target platform, you should pick the smaller version among them. 예를 들어 .NET Framework 4.8 및 .NET 5.0에서 실행하려는 경우 사용할 수 있는 가장 높은 .NET Standard 버전은 .NET Standard 2.0입니다.For example, if you want to run on .NET Framework 4.8 and .NET 5.0, the highest .NET Standard version you can use is .NET Standard 2.0.

대상으로 지정할 .NET 표준 버전Which .NET Standard version to target

대상으로 할 .NET Standard 버전을 선택할 때는 다음과 같이 상충되는 요소를 고려해야 합니다.When choosing a .NET Standard version to target, consider this trade-off:

  • 버전이 높을수록 라이브러리의 코드에 더 많은 API를 사용할 수 있습니다.The higher the version, the more APIs are available to your library's code.
  • 버전이 낮을수록 더 많은 앱과 라이브러리가 라이브러리를 사용할 수 있습니다.The lower the version, the more apps and libraries can use your library.

일반적으로 가능한 .NET Standard의 가장 낮은 버전을 대상으로 지정하는 것이 좋습니다.We recommend you target the lowest version of .NET Standard possible. 따라서 대상으로 지정할 수 있는 가장 높은 .NET 표준 버전을 찾은 후 다음 단계에 따릅니다.So, after you find the highest .NET Standard version you can target, follow these steps:

  1. 다음으로 낮은 버전의 .NET 표준을 대상으로 지정하고 프로젝트를 빌드합니다.Target the next lower version of .NET Standard and build your project.
  2. 프로젝트가 성공적으로 빌드되면 1단계를 반복합니다.If your project builds successfully, repeat step 1. 그렇지 않으면 다음으로 높은 버전으로 대상을 변경합니다. 이 버전을 사용해야 합니다.Otherwise, retarget to the next higher version and that's the version you should use.

그러나 하위 .NET Standard 버전을 대상으로 지정하면 많은 지원 종속성이 도입됩니다.However, targeting lower .NET Standard versions introduces a number of support dependencies. 프로젝트에서 .NET 1.x를 대상으로 지정하는 경우에는 .NET Standard 2.0 ‘또한 대상으로 지정’하는 것이 좋습니다.If your project targets .NET Standard 1.x, we recommend that you also target .NET Standard 2.0. 이렇게 하면 .NET Standard 2.0 호환 구현에서 실행되는 라이브러리의 사용자에 대한 종속성 그래프가 단순화되고 다운로드해야 하는 패키지 수가 감소합니다.This simplifies the dependency graph for users of your library that run on .NET Standard 2.0 compatible implementations, and it reduces the number of packages they need to download.

.NET 표준 버전 관리 규칙.NET Standard versioning rules

두 가지 기본 버전 관리 규칙이 있습니다.There are two primary versioning rules:

  • 추가: .NET 표준 버전은 논리적으로 동심원입니다. 더 높은 버전이 이전 버전의 모든 API를 통합합니다.Additive: .NET Standard versions are logically concentric circles: higher versions incorporate all APIs from previous versions. 버전 간에 큰 차이는 없습니다.There are no breaking changes between versions.
  • 변경할 수 없음: 제공되고 나면 .NET 표준 버전은 고정됩니다.Immutable: Once shipped, .NET Standard versions are frozen.

2.1 후에는 새로운 .NET Standard 버전이 없습니다.There will be no new .NET Standard versions after 2.1. 자세한 내용은 이 문서 뒷부분의 .NET 5 및 .NET Standard를 참조하세요.For more information, see .NET 5 and .NET Standard later in this article.

규격Specification

.NET Standard 규격은 표준화된 API의 집합입니다.The .NET Standard specification is a standardized set of APIs. 이 규격은 .NET 구현자, 특히 Microsoft(.NET Framework, .NET Core, Mono 포함)와 Unity에서 유지 관리합니다.The specification is maintained by .NET implementers, specifically Microsoft (includes .NET Framework, .NET Core, and Mono) and Unity.

공식 아티팩트Official artifacts

공식 규격은 표준의 일부인 API를 정의하는 .cs 파일 세트입니다.The official specification is a set of .cs files that define the APIs that are part of the standard. dotnet/standard repository(dotnet/표준 리포지토리)의 ref directory(ref 디렉터리)는 .NET Standard API를 정의합니다.The ref directory in the dotnet/standard repository defines the .NET Standard APIs.

NETStandard.Library 메타패키지(소스)는 하나 이상의 .NET Standard 버전을 부분적으로 정의하는 라이브러리 집합에 대해 설명합니다.The NETStandard.Library metapackage (source) describes the set of libraries that define (in part) one or more .NET Standard versions.

System.Runtime 등의 지정된 구성 요소는 다음에 대해 설명합니다.A given component, like System.Runtime, describes:

  • .NET 표준의 일부(해당 범위만)Part of .NET Standard (just its scope).
  • 해당 범위에 대한 .NET 표준의 여러 버전Multiple versions of .NET Standard, for that scope.

보다 편리하게 읽을 수 있고 특정 개발자 시나리오(예: 컴파일러 사용)를 지원할 수 있도록 파생 아티팩트가 제공됩니다.Derivative artifacts are provided to enable more convenient reading and to enable certain developer scenarios (for example, using a compiler).

패키지 표현Package representation

.NET Standard 참조 어셈블리의 기본 배포 수단은 NuGet 패키지입니다.The primary distribution vehicle for the .NET Standard reference assemblies is NuGet packages. 구현체는 각 .NET 구현에 적절한 다양한 방법으로 제공됩니다.Implementations are delivered in a variety of ways, appropriate for each .NET implementation.

NuGet 패키지는 하나 이상의 프레임워크를 대상으로 합니다.NuGet packages target one or more frameworks. .NET Standard 패키지는 “.NET Standard” 프레임워크를 대상으로 합니다..NET Standard packages target the ".NET Standard" framework. netstandard 압축 TFM(예: netstandard1.4)을 사용하여 .NET Standard 프레임워크를 대상으로 지정할 수 있습니다.You can target the .NET Standard framework using the netstandard compact TFM (for example, netstandard1.4). .NET의 여러 구현에서 실행되도록 만들어진 라이브러리는 이 프레임워크를 대상으로 해야 합니다.Libraries that are intended to run on multiple implementations of .NET should target this framework. 광범위한 API의 경우 사용 가능한 API 수가 .NET Standard 1.6과 2.0 간에 세 배 이상 증가하므로 netstandard2.0을 대상으로 지정합니다.For the broadest set of APIs, target netstandard2.0 since the number of available APIs more than doubled between .NET Standard 1.6 and 2.0.

NETStandard.Library 메타패키지는 .NET Standard를 정의하는 NuGet 패키지의 전체 집합을 참조합니다.The NETStandard.Library metapackage references the complete set of NuGet packages that define .NET Standard. netstandard를 대상으로 지정하는 가장 일반적인 방법은 이 메타패키지를 참조하는 것입니다.The most common way to target netstandard is by referencing this metapackage. 이 메타패키지는 최대 40개의 .NET 라이브러리 및 .NET 표준을 정의하는 관련 API를 설명하고 액세스할 수 있도록 합니다.It describes and provides access to the ~40 .NET libraries and associated APIs that define .NET Standard. 추가 API에 액세스하기 위해 netstandard를 대상으로 하는 추가 패키지를 참조할 수 있습니다.You can reference additional packages that target netstandard to get access to additional APIs.

버전 관리Versioning

사양은 단수형이 아니라 선형적으로 버전이 지정되는 API 집합입니다.The specification is not singular, but a linearly versioned set of APIs. 첫 번째 버전의 표준에서는 API의 기준 집합을 설정합니다.The first version of the standard establishes a baseline set of APIs. 이후 버전에서는 API를 추가하고 이전 버전에서 정의한 API를 상속받습니다.Subsequent versions add APIs and inherit APIs defined by previous versions. 표준에서 API 제거와 관련하여 정해진 규정은 없습니다.There is no established provision for removing APIs from the Standard.

.NET Standard는 어느 하나의 .NET 구현에 특정되지 않고, 이러한 구현 중 하나의 버전 관리 체계와 일치하지도 않습니다..NET Standard is not specific to any one .NET implementation, nor does it match the versioning scheme of any of those implementations.

앞에서 설명한 것처럼 2.1 이후에는 새로운 .NET Standard 버전이 없습니다.As noted earlier, there will be no new .NET Standard versions after 2.1.

.NET Standard 대상 지정Target .NET Standard

netstandard 프레임워크와 NETStandard.Library 메타패키지의 조합을 사용하여 .NET Standard 라이브러리를 빌드할 수 있습니다.You can build .NET Standard Libraries using a combination of the netstandard framework and the NETStandard.Library metapackage.

.NET Framework 호환 모드.NET Framework compatibility mode

.NET Standard 2.0부터 .NET Framework 호환성 모드가 도입되었습니다.Starting with .NET Standard 2.0, the .NET Framework compatibility mode was introduced. 이 호환 모드를 사용하면 .NET Standard 프로젝트가 .NET Standard에 컴파일된 것처럼 .NET Framework 라이브러리를 참조할 수 있습니다.This compatibility mode allows .NET Standard projects to reference .NET Framework libraries as if they were compiled for .NET Standard. .NET Framework 라이브러리를 참조하는 작업은 라이브러리가 WPF(Windows Presentation Foundation) API를 사용하는 것처럼 일부 프로젝트에서 작동하지 않습니다.Referencing .NET Framework libraries doesn't work for all projects, such as libraries that use Windows Presentation Foundation (WPF) APIs.

자세한 내용은 .NET Framework 호환 모드를 참조하세요.For more information, see .NET Framework compatibility mode.

.NET Standard 라이브러리 및 Visual Studio.NET Standard libraries and Visual Studio

Visual Studio에서 .NET Standard 라이브러리를 빌드하기 위해 Windows에 Visual Studio 2019 또는 Visual Studio 2017 버전 15.3 이상이 설치되어 있거나 macOS에 Mac용 Visual Studio 버전 7.1 이상이 설치되어 있는지 확인합니다.In order to build .NET Standard libraries in Visual Studio, make sure you have Visual Studio 2019 or Visual Studio 2017 version 15.3 or later installed on Windows, or Visual Studio for Mac version 7.1 or later installed on macOS.

프로젝트에서 .NET Standard 2.0 라이브러리를 사용해야 하는 경우 Visual Studio 2015에서 수행할 수도 있습니다.If you only need to consume .NET Standard 2.0 libraries in your projects, you can also do that in Visual Studio 2015. 그러나 NuGet 클라이언트 3.6 이상을 설치해야 합니다.However, you need NuGet client 3.6 or higher installed. NuGet 다운로드 페이지에서 Visual Studio 2015에 대한 NuGet 클라이언트를 다운로드할 수 있습니다.You can download the NuGet client for Visual Studio 2015 from the NuGet downloads page.

.NET 5 및 .NET Standard.NET 5 and .NET Standard

.NET 5는 Microsoft에서 적극적으로 개발하고 있는 .NET의 구현입니다..NET 5 is the implementation of .NET that Microsoft is actively developing. Windows 데스크톱 앱과 크로스 플랫폼 콘솔 앱, 클라우드 서비스 및 웹 사이트에 사용할 수 있는 일관된 기능 및 API 집합을 갖춘 단일 제품입니다.It's a single product with a uniform set of capabilities and APIs that can be used for Windows desktop apps and cross-platform console apps, cloud services, and websites. .NET 5.0 TFM은 다음과 같은 광범위한 시나리오를 반영합니다.The .NET 5.0 TFMs reflect this broad range of scenarios:

  • net5.0

    이 TFM은 어디서나 실행되는 코드에 대한 것입니다.This TFM is for code that runs everywhere. 몇 가지 예외를 제외하고 플랫폼 간에 작동하는 기술만 포함됩니다.With a few exceptions, it includes only technologies that work cross-platform. .NET 5 코드의 경우 net5.0netcoreappnetstandard TFM을 모두 대체합니다.For .NET 5 code, net5.0 replaces both netcoreapp and netstandard TFMs.

  • net5.0-windows

    이는 net5.0이 참조하는 모든 것에 OS별 기능을 추가하는 OS별 TFM의 예입니다.This is an example of OS-specific TFMs that add OS-specific functionality to everything that net5.0 refers to.

net5.0을 대상으로 하는 경우와 netstandard를 대상으로 하는 경우 비교When to target net5.0 vs. netstandard

netstandard를 대상으로 하는 기존 코드의 경우 TFM을 net5.0으로 변경할 필요가 없습니다.For existing code that targets netstandard, there's no need to change the TFM to net5.0. .NET 5.0은 .NET Standard 2.1 이전 버전을 구현합니다..NET 5.0 implements .NET Standard 2.1 and earlier. .NET Standard에서 .NET 5.0으로 대상을 변경하는 유일한 이유는 더 많은 런타임 기능, 언어 기능 또는 API에 대한 액세스 권한을 얻기 위한 것입니다.The only reason to retarget from .NET Standard to .NET 5.0 would be to gain access to more runtime features, language features, or APIs. 예를 들어 C# 9를 사용하려면 .NET 5.0을 대상으로 해야 합니다.For example, in order to use C# 9, you need to target .NET 5.0. .NET 5.0 및 .NET Standard를 다중 대상으로 지정하여 새로운 기능에 액세스할 수 있고 다른 .NET 구현에서 라이브러리를 계속 사용할 수 있습니다.You can multitarget .NET 5.0 and .NET Standard to get access to newer features and still have your library available to other .NET implementations.

다음은 .NET 5용 새 코드에 대한 몇 가지 지침입니다.Here are some guidelines for new code for .NET 5:

  • 앱 구성 요소App components

    라이브러리를 사용하여 애플리케이션을 여러 구성 요소로 나누는 경우 net5.x를 대상으로 하는 것이 좋습니다. 여기서 5.x는 애플리케이션이 대상으로 할 수 있는 가장 빠른 .NET 5 버전입니다.If you're using libraries to break down an application into several components, we recommend you target net5.x where 5.x is the earliest .NET 5 version that your application can target. 단순성을 위해 애플리케이션을 구성하는 모든 프로젝트를 동일한 .NET 버전에서 유지하는 것이 가장 좋습니다.For simplicity, it's best to keep all projects that make up your application on the same version of .NET. 그러면 어디에서나 동일한 BCL 기능을 사용할 수 있습니다.Then you can assume the same BCL features everywhere.

  • 재사용 가능한 라이브러리Reusable libraries

    NuGet에 제공하려는 재사용 가능한 라이브러리를 구축하는 경우 도달 범위와 사용 가능한 기능 집합 간의 절충을 고려하세요.If you're building reusable libraries that you plan to ship on NuGet, consider the trade-off between reach and available feature set. .NET Standard 2.0은 .NET Framework에서 지원하는 최신 버전이므로 상당히 큰 기능 집합을 제공합니다..NET Standard 2.0 is the latest version that is supported by .NET Framework, so it gives good reach with a fairly large feature set. 도달 범위를 최소화하기 위해 사용 가능한 기능 집합을 제한하므로 .NET Standard 1.x를 대상으로 지정하지 않는 것이 좋습니다.We don't recommend targeting .NET Standard 1.x, as you'd limit the available feature set for a minimal increase in reach.

    .NET Framework를 지원할 필요가 없는 경우 .NET Standard 2.1 또는 .NET 5를 사용할 수 있습니다.If you don't need to support .NET Framework, you could go with .NET Standard 2.1 or .NET 5. .NET Standard 2.1을 건너뛰고 바로 .NET 5로 이동하는 것이 좋습니다.We recommend you skip .NET Standard 2.1 and go straight to .NET 5. 가장 널리 사용되는 라이브러리는 .NET Standard 2.0 및 .NET 5 모두에 대해 다중 대상 지정이 됩니다.Most widely used libraries will end up multi-targeting for both .NET Standard 2.0 and .NET 5. .NET Standard 2.0을 지원하면 최대한의 도달 범위를 얻는 반면, .NET 5를 지원하면 이미 .NET 5를 사용하는 고객을 위해 최신 플랫폼 기능을 활용할 수 있습니다.Supporting .NET Standard 2.0 gives you the most reach, while supporting .NET 5 ensures you can leverage the latest platform features for customers that are already on .NET 5.

.NET Standard 문제.NET Standard problems

다음은 .NET 5가 왜 플랫폼과 워크로드에서 코드를 공유하는 더 좋은 방법인지를 설명하는 데 도움이 되는 .NET Standard의 몇 가지 문제입니다.Here are some problems with .NET Standard that help explain why .NET 5 is the better way to share code across platforms and workloads:

  • 새 API 추가의 속도 저하Slowness to add new APIs

    .NET Standard는 모든 .NET 구현이 지원해야 하는 API 집합으로 만들어졌기 때문에 새 API 추가를 제안하기 위한 검토 프로세스가 있습니다..NET Standard was created as an API set that all .NET implementations would have to support, so there was a review process for proposals to add new APIs. 이는 현재 및 미래의 모든 .NET 플랫폼에서 구현할 수 있는 API만 표준화하기 위한 것이었습니다.The goal was to standardize only APIs that could be implemented in all current and future .NET platforms. 그로 인해 기능이 특정 릴리스를 놓친 경우 표준 버전에 추가되기까지 몇 년을 기다려야 할 수도 있습니다.The result was that if a feature missed a particular release, you might have to wait for a couple of years before it got added to a version of the Standard. 그런 다음, .NET Standard의 새 버전이 널리 지원되기까지 더 오랜 시간이 걸릴 수 있습니다.Then you'd wait even longer for the new version of .NET Standard to be widely supported.

    .NET 5의 솔루션: 기능이 구현되면 코드 기반이 공유되기 때문에 모든 .NET 5 앱 및 라이브러리에서 이미 사용할 수 있습니다.Solution in .NET 5: When a feature is implemented, it's already available for every .NET 5 app and library because the code base is shared. 그리고 API 사양과 구현 간에 차이가 없기 때문에 .NET Standard보다 훨씬 빠르게 새로운 기능을 활용할 수 있습니다.And since there's no difference between the API specification and its implementation, you're able to take advantage of new features much quicker than with .NET Standard.

  • 복잡한 버전 관리Complex versioning

    API 규격을 구현과 분리하면 API 규격 버전과 구현 버전 간의 매핑이 복잡해집니다.The separation of the API specification from its implementations results in complex mapping between API specification versions and implementation versions. 이러한 복잡성은 이 문서의 앞부분에 나와 있는 표와 해석 방법에 대한 지침에서 분명히 확인할 수 있습니다.This complexity is evident in the table shown earlier in this article and the instructions for how to interpret it.

    .NET 5의 솔루션: .NET 5.x API 사양과 그 구현 사이에는 분리가 없습니다.Solution in .NET 5: There's no separation between a .NET 5.x API specification and its implementation. 그 결과로 나온 것이 단순화된 TFM 체계입니다.The result is a simplified TFM scheme. 모든 워크로드에 대해 하나의 TFM 접두사가 있습니다. net5.0은 라이브러리, 콘솔 앱 및 웹앱에 사용됩니다.There's one TFM prefix for all workloads: net5.0 is used for libraries, console apps, and web apps. 유일한 변형은 net5.0-windows와 같은 특정 플랫폼에 대한 플랫폼별 API를 지정하는 접미사입니다.The only variation is a suffix that specifies platform-specific APIs for a particular platform, such as net5.0-windows. 이 TFM 명명 규칙 덕분에 주어진 앱이 주어진 라이브러리를 사용할 수 있는지 쉽게 알 수 있습니다.Thanks to this TFM naming convention, you can easily tell whether a given app can use a given library. .NET Standard의 버전 번호와 같은 버전 번호 표가 필요하지 않습니다.No version number equivalents table like the one for .NET Standard is needed.

  • 런타임 시 플랫폼에서 지원되지 않는 예외Platform-unsupported exceptions at run time

    .NET Standard는 플랫폼별 API를 노출합니다..NET Standard exposes platform-specific APIs. 코드는 오류 없이 컴파일될 수 있으며 이식 가능하지 않더라도 모든 플랫폼에 이식 가능한 것처럼 보일 수 있습니다.Your code might compile without errors and appear to be portable to any platform even if it isn't portable. 지정된 API에 대한 구현이 없는 플랫폼에서 실행되면 런타임 오류가 발생합니다.When it runs on a platform that doesn't have an implementation for a given API, you get run-time errors.

    .NET 5의 솔루션: .NET 5 SDK에는 기본적으로 활성화되는 코드 분석기가 포함되어 있습니다.Solution in .NET 5: The .NET 5 SDK includes code analyzers that are enabled by default. 플랫폼 호환성 분석기는 실행하려는 플랫폼에서 지원되지 않는 API의 의도하지 않은 사용을 감지합니다.The platform compatibility analyzer detects unintentional use of APIs that aren't supported on the platforms you intend to run on. 자세한 내용은 플랫폼 호환성 분석기를 참조하세요.For more information, see Platform compatibility analyzer.

.NET Standard 사용되지 않음.NET Standard not deprecated

.NET Standard는 여러 .NET 구현에서 사용할 수 있는 라이브러리에 계속 필요합니다..NET Standard is still needed for libraries that can be used by multiple .NET implementations. 다음 시나리오에서는 .NET Standard를 대상으로 하는 것이 좋습니다.We recommend you target .NET Standard in the following scenarios:

  • netstandard2.0을 사용하여 .NET Framework와 기타 .NET의 모든 구현 간에 코드를 공유합니다.Use netstandard2.0 to share code between .NET Framework and all other implementations of .NET.
  • netstandard2.1를 사용하여 Mono, Xamarin 및 .NET Core 3.x 간에 코드를 공유합니다.Use netstandard2.1 to share code between Mono, Xamarin, and .NET Core 3.x.

참고 항목See also