우리는 언제 다른 것을 사용해야합니까?
결정은 호환성과 API 액세스 간의 절충입니다.
라이브러리와 호환되는 앱 수를 늘리고 싶을 때 .NET 표준 라이브러리를 사용하고 라이브러리가 액세스 할 수있는 .NET API 노출 영역을 줄여도됩니다.
라이브러리가 액세스 할 수있는 .NET API 노출 영역을 늘리고 싶을 때 .NET Core 라이브러리를 사용하고 .NET Core 앱만 라이브러리와 호환되도록 허용해도됩니다.
예를 들어 .NET Standard 1.3을 대상으로하는 라이브러리는 .NET Framework 4.6, .NET Core 1.0, Universal Windows Platform 10.0 및 .NET Standard 1.3을 지원하는 기타 플랫폼을 대상 으로하는 앱 과 호환됩니다 . 그러나 라이브러리는 .NET API의 일부에 액세스 할 수 없습니다. 예를 들어 Microsoft.NETCore.CoreCLR
패키지는 .NET Core와 호환되지만 .NET Standard와는 호환되지 않습니다.
클래스 라이브러리 (.NET 표준)와 클래스 라이브러리 (.NET 코어)의 차이점은 무엇입니까?
패키지 기반 프레임 워크 섹션 에서는 차이점을 설명합니다.
호환성 : .NET Standard를 대상으로하는 라이브러리는 .NET Core, .NET Framework, Mono / Xamarin과 같은 .NET Standard 호환 런타임에서 실행됩니다. 반면 .NET Core를 대상으로하는 라이브러리는 .NET Core 런타임에서만 실행할 수 있습니다.
API Surface Area : .NET 표준 라이브러리에는 모든 것이 포함되어 NETStandard.Library
있고 .NET Core 라이브러리에는 모든 것이 포함되어 Microsoft.NETCore.App
있습니다. 후자는 약 20 개의 추가 라이브러리를 포함하며,이 중 일부는 .NET 표준 라이브러리 (예 :)에 수동으로 추가 할 수 System.Threading.Thread
있고 일부는 .NET 표준 (예 :Microsoft.NETCore.CoreCLR
.
또한 .NET Core 라이브러리는 런타임을 지정하고 응용 프로그램 모델과 함께 제공됩니다. 예를 들어 단위 테스트 클래스 라이브러리를 실행 가능하게 만드는 것이 중요합니다.
왜 둘 다 존재합니까?
라이브러리를 잠시 무시하면 .NET 표준이 존재하는 이유는 이식성 때문입니다. .NET 플랫폼이 구현하기로 동의 한 API 세트를 정의합니다. .NET 표준을 구현하는 모든 플랫폼은 해당 .NET 표준을 대상으로하는 라이브러리와 호환됩니다. 이러한 호환 가능한 플랫폼 중 하나는 .NET Core입니다.
라이브러리로 돌아와서 .NET 표준 라이브러리 템플릿은 API 런타임 영역을 희생하면서 여러 런타임에서 실행되도록 존재합니다. 반대로 .NET Core 라이브러리 템플릿은 더 많은 API 노출 영역에 액세스하고 (호환성을 희생하면서) 실행 파일을 빌드 할 플랫폼을 지정하기 위해 존재합니다.
다음은 어떤 .NET 표준이 어떤 .NET 구현을 지원하고 얼마나 많은 API 표면 영역을 지원하는지 보여주는 대화 형 매트릭스 입니다.