[.net] .NET 표준 및 .NET Core

.NET Standard와 .NET Core의 차이점에 대해 읽었지만 차이점이 무엇인지, 언제 .NET Standard 라이브러리 프로젝트를 선택하고 언제 .NET Core 라이브러리 프로젝트를 선택해야하는지 모르겠습니다.

.NET 표준은 사용 된 플랫폼에 관계없이 (선택한 .NET 표준 버전과 플랫폼이 호환되는 한) API 세트를 항상 사용할 수 있도록하는 것입니다. 내가 실수하지 않으면 .NET Standard의 클래스 라이브러리를 만든 다음 선택한 .NET Standard 버전과 호환되는 모든 플랫폼에서 사용할 수 있습니다.

.NET Core를 사용하면 플랫폼 간 사용을위한 것이므로 .NET Core 라이브러리를 선택하면 .NET Standard와 마찬가지로 많은 플랫폼에서도 사용할 수있는 것 같습니다.

결국에는 차이점이 없습니다. 언제 사용해야합니까? 그들 사이의 차이점은 무엇입니까?



답변

나는 당신의 의심을 더 명확히하고 Jon Skeet의 답변을 확장하려고 노력할 것입니다.

.NET Standard는 사양 이므로 특정 .NET Standard 버전 용으로 컴파일 된 라이브러리를 다른 .NET Standard 구현에서 사용할 수 있습니다.

으로 내 다른 코멘트에서 말했다, .NET 표준 및 기타 .NET 표준 구현 (.NET 코어, .NET 프레임 워크, 등) 사이의 관계에 대한 좋은 비유입니다 데이비드 파울러하여이 요점은 : .NET 표준 버전은 Interfaces프레임 워크가있는 동안, 이러한 인터페이스의 구현.

이 단순화 된 다이어그램은이 관계를 이해하는 데 도움이 될 수 있습니다.

NET 표준 인터페이스 유추

타겟팅하는 모든 NetCore10것은 INetStandard15API NetCore10 특정 API (예 🙂 에 액세스 할 수 DotNetHostPolicy있습니다.

물론이 라이브러리는 다른 INetStandard15구현 에서는 사용할 수 없습니다 ( 또는 NetCore10로 변환 할 수 없음 ).NetFramework462Mono46

당신은, 대신, 필요 단지에 액세스 할 경우 INetStandard15API를 라이브러리에 의해 사용될 수있다 (및 대상 대신 구체적인 프레임 워크의 사양이 있음) 어떤 어떤 구현을 프레임 워크 ( NetCore10, NetFramework462, 등)

참고 : 원래 비유에서 David Fowler는 .NET 표준 버전과 프레임 워크 구현에 모두 인터페이스를 사용했습니다. 인터페이스와 클래스를 사용하는 것이 사양과 구체적인 구현 간의 관계를보다 직관적이고 더 잘 표현한다고 생각합니다.


답변

.NET Core는 .NET Standard 의 구현 입니다. 여러 운영 체제에서 사용할 수 있지만 동일하지는 않습니다. 다른 .NET 표준 구현도 있습니다.

당신이 .NET 핵심 라이브러리를 작성하는 경우 그래서, 그것은 .NET 코어에서 구현되는 것들에 액세스 할 수 있지만 것 없는 .NET 표준의 일부가 라이브러리와 호환되지 않습니다 다른 .NET 표준의 구현, Xamarin, Tizen, 전체 .NET 데스크톱 프레임 워크 등

한마디로 : 최대 이식성을 달성하려면 라이브러리를 .NET 표준으로 지정하십시오.


답변

.NET Core 클래스 라이브러리는 기본적으로 .NET Framework 라이브러리의 하위 집합이며 API가 더 적습니다. .NET Core Class 라이브러리를 고수하면 런타임간에 코드를 공유하기가 어렵습니다. 이 코드는 필요한 API가 없기 때문에 다른 런타임 (Mona for Xamarin)에서는 작동하지 않을 수 있습니다. 이 문제를 해결하기 위해 사용할 수있는 API를 알려주는 사양 세트 인 .NET 표준이 있습니다 . .NET Standard의 주요 목적은 런타임간에 코드를 공유하는 것입니다. 또한이 사양은 모든 런타임에 의해 구현되어야합니다. ( Xamarin 용 .NET Framework, .NET Core 및 Mono).

따라서 .NET Core 프로젝트에만 라이브러리를 사용한다고 확신하는 경우 .NET Standard를 무시할 수 있지만 .NET Framework 또는 Mono for Xamarin에서 코드를 사용할 가능성이 적다면 더 좋습니다. .NET 표준에 충실

또한 높은 버전의 .NET Standard에는 더 많은 API가 포함되어 있지만 더 많은 플랫폼에서 더 낮은 버전이 지원됩니다. 따라서 런타임간에 공유하려는 .NET 표준 라이브러리를 작성하면 가능한 가장 낮은 버전을 대상으로하여 가장 많은 플랫폼에 도달 할 수 있습니다. 예를 들어 .NET Framework 4.5 및 .NET Core 1.0에서 실행하려는 경우 사용할 수있는 가장 높은 .NET 표준 버전은 .NET Standard 1.1입니다. 이에 대한 자세한 내용 은 설명서에서이 훌륭한 표를 참조하십시오 .

추신 : 또한 라이브러리를 .NET 표준으로 변환하려는 경우 .NET 이식성 분석기가 도움이 될 수 있습니다.


답변

.NET Standard 는 .NET 구현에서 사용할 수있는 .NET API의 사양입니다. 이를 통해 모든 .NET 구현에 대해 균일 한 BCL API 세트를 정의 할 수 있습니다.

.NET Core 는 이러한 .NET 표준 구현 중 하나입니다. .NET Framework는 .NET Standard의 또 다른 구현입니다.

.NET 블로그의 이미지

여기에 이미지 설명을 입력하십시오

Federicos answer 는 각 프레임 워크가 버전과 함께 어떻게 진화하는지에 대한 그래픽 개요를 제공합니다. 아래의 Microsoft Docs 다이어그램 살펴보십시오 .

여기에 이미지 설명을 입력하십시오

타겟팅 .NET 표준은 이러한 .NET 코어 (또는 .NET 프레임 워크)와 같은 특정 .NET 플랫폼을 대상으로하는 반면 플랫폼 지원은 해당 플랫폼에 대한 모든 플랫폼 기능을 사용할 수를 증가시킨다.


답변

.NET Standard 는 모든 .NET 구현이 제공해야하는 API 사양입니다. .NET 제품군에 일관성을 제공하며 모든 .NET 구현에서 사용할 수있는 라이브러리를 구축 할 수 있습니다. 공유 구성 요소 빌드를위한 PCL을 대체합니다.

.NET Core 는 ASP.NET Core를 사용하여 콘솔 응용 프로그램, 웹 응용 프로그램 및 클라우드 서비스를 구축하는 데 최적화 된 .NET 표준의 구현입니다. SDK에는 Visual Studio 개발 외에도 전체 명령 줄 기반 개발 워크 플로를 지원하는 강력한 도구가 포함되어 있습니다. aka.ms/netstandardfaqaka.ms/netcore 에서 자세한 내용을 확인할 수 있습니다
.


위의 질문에 언급 된 대부분의 내용에 대한 명확한 설명과 함께 Microsoft (MSDN-2017 년 9 월)의 매우 유용한 다음 기사에서 찾을 수 있습니다. .NET 표준-.NET Core 및 .NET 표준


답변

.NET Framework을 의미 했습니까? .NET 표준은 .NET Framework, .NET Core 및 Xamarin과 같은 구현이므로

Linux에서 호스팅 할 수 있기 때문에 .NET Core를 좋아합니다 (제 경험에 nginx 사용). IIS에서만 호스팅 할 수있는 .NET 프레임 워크와 다릅니다. 이 경우 호스팅 예산을 고려할 수 있습니다 (Windows 서버가 비싸기 때문에).

에서 개발 환경 관점 , 닷넷 코어는 경량입니다. 따라서 Visual Studio뿐만 아니라 IDE에도 VSCode, Sublime을 사용할 수 있습니다.


답변

간단히 말해서 .NET 표준은 dll로 컴파일되는 클래스 라이브러리 프로젝트를 작성하는 데 사용됩니다. .NET Core는 모든 운영 체제 (Windows, Linux, MacOS)에서 실행할 수있는 실제 웹 응용 프로그램 개발에 사용할 수 있습니다. .NET Core 3에서 Microsoft는 WPF를 사용하여 데스크톱 앱을 개발할 수있는 기능을 제공했지만 지금까지 이러한 앱은 플랫폼 간이 아니며 Windows 시스템에서만 실행됩니다. 향후 Microsoft는 플랫폼 간 플랫폼도 만들 수 있습니다. 라이브러리 / dll은 .NET (.NET 프레임 워크, .NET 코어)을 사용하는 모든 응용 프로그램에서 사용할 수 있습니다. 즉, .NET 표준을 .NET 프레임 워크 및 .NET 코어와 함께 사용할 수 있습니다.