.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 구현에서 사용할 수 있습니다.
내 다른 의견에서 언급했듯이 David Fowler 는 .NET 표준과 다른 .NET 표준 구현 (.NET Core, .NET Framework 등)의 관계에 대한 좋은 비유를 들었습니다 . .NET 표준 버전은 .NET Interfaces
프레임 워크는 이러한 인터페이스의 구현.
이 단순화 된 다이어그램은이 관계를 이해하는 데 도움이 될 수 있습니다.
타겟팅하는 모든 NetCore10
것은 INetStandard15
API 및 NetCore10
특정 API (예 :) 에 액세스 할 수 DotNetHostPolicy
있습니다.
물론이 라이브러리는 다른 INetStandard15
구현 에서 사용할 수 없습니다 ( 또는 NetCore10
로 변환 할 수 없음 ).NetFramework462
Mono46
당신은, 대신, 필요 단지에 액세스 할 경우 INetStandard15
API를 라이브러리에 의해 사용될 수있다 (및 대상 대신 구체적인 프레임 워크의 사양이 있음) 어떤 어떤 구현을 프레임 워크 ( NetCore10
, NetFramework462
, 등)
참고 : 원래 비유에서 David Fowler는 .NET 표준 버전과 프레임 워크 구현에 모두 인터페이스를 사용했습니다. 인터페이스와 클래스를 사용하는 것이 사양과 구체적인 구현 간의 관계를보다 직관적이고 더 잘 표현한다고 생각합니다.
.NET Core는 .NET Standard 의 구현 입니다. 여러 운영 체제에서 사용할 수 있지만 동일하지는 않습니다. 다른 .NET 표준 구현도 있습니다.
당신이 .NET 핵심 라이브러리를 작성하는 경우 그래서, 그것은 .NET 코어에서 구현되는 것들에 액세스 할 수 있지만 것 없는 .NET 표준의 일부가 라이브러리와 호환되지 않습니다 다른 .NET 표준의 구현, Xamarin, Tizen, 전체 .NET 데스크톱 프레임 워크 등
한마디로 : 최대 이식성을 달성하려면 라이브러리를 .NET 표준으로 지정하십시오.
.NET Core 클래스 라이브러리는 기본적으로 API가 적은 .NET Framework 라이브러리의 하위 집합입니다. .NET Core Class 라이브러리를 고수하면 런타임간에 코드를 공유하기가 어렵습니다. 이 코드에는 필요한 API가 없기 때문에 다른 런타임 (Mono for Xamarin)에서 작동하지 않을 수 있습니다. 이 문제를 해결하기 위해 사용할 수있는 API를 알려주는 사양 세트 인 .NET 표준이 있습니다 . .NET Standard의 주요 목적은 런타임간에 코드를 공유하는 것입니다. 또한이 사양이 모든 런타임에 의해 구현되어야한다는 점이 중요합니다 (.NET Framework, .NET Core 및 Mono for Xamarin).
따라서 .NET Core 프로젝트에만 라이브러리를 사용하려면 .NET 표준을 무시할 수 있지만 .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 구현이 제공해야하는 API 사양입니다. .NET 제품군에 일관성을 제공하며 모든 .NET 구현에서 사용할 수있는 라이브러리를 구축 할 수 있습니다. 공유 구성 요소 빌드를위한 PCL을 대체합니다.
.NET Core 는 ASP.NET Core를 사용하여 콘솔 응용 프로그램, 웹 응용 프로그램 및 클라우드 서비스를 구축하는 데 최적화 된 .NET 표준의 구현입니다. SDK에는 Visual Studio 개발 외에도 전체 명령 줄 기반 개발 워크 플로를 지원하는 강력한 도구가 포함되어 있습니다. aka.ms/netstandardfaq 및 aka.ms/netcore 에서 자세한 내용을 확인할 수 있습니다 .
위의 질문에 언급 된 대부분의 내용에 대한 명확한 설명과 함께 Microsoft (MSDN-2017 년 9 월)의 다음과 같은 매우 유용한 기사에서 찾을 수 있습니다. .NET Standard-.NET Core 및 .NET Standard Demystifying
In simple terms, .NET standard is used for writing class library projects which compiles to dll. .NET Core can be used for developing actual web applications which can run on all operating systems (Windows, Linux, MacOS). (In .NET Core 3 Microsoft has provide the functionality to develop desktop apps using WPF, but uptil now these apps will not be cross platform and will only run on windows system. In future Microsoft might make them cross-platform too) .NET standard libraries/dlls can be used in any application which uses .NET (.NET framework, .NET Core) which means that you can use .NET standard with both .NET framework and .NET core.
.NET Standard is a specification of .NET APIs intended to be available on .NET implementations. This enables to define uniform set of BCL APIs for all .NET implementations.
.NET Core is one such implementation of .NET Standard. .NET Framework is another implementation of .NET Standard.
Image from .NET Blog
Federicos answer gives you a graphical overview of how each framework evolve with versions. Take a look at below diagram from Microsoft Docs.
Targeting .NET Standard increases your platform support whereas targeting a particular .NET platform such as .NET Core (or .NET Framework) will allow you to use all the platform features for that platform.
Did you mean .NET Framework? Because .NET standard is an implementations, such as .NET Framework, .NET Core and Xamarin.
Linux에서 호스팅 할 수 있기 때문에 .NET Core를 좋아합니다 (제 경험에 nginx 사용). IIS에서만 호스팅 할 수있는 .NET 프레임 워크와 다릅니다. 이 경우 호스팅 예산을 고려할 수 있습니다 (Windows 서버가 비싸기 때문에).
에서 개발 환경 관점 , 닷넷 코어는 경량입니다. 따라서 Visual Studio뿐만 아니라 IDE에도 VSCode, Sublime을 사용할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/44085424/net-standard-vs-net-core
'IT story' 카테고리의 다른 글
uint8_t vs unsigned char (0) | 2020.04.28 |
---|---|
파이썬에서 객체 인스턴스가 속성에 의해 동일한 지 비교 (0) | 2020.04.28 |
스택 스매싱 감지 (0) | 2020.04.28 |
함수 이름 주위의 괄호는 무엇을 의미합니까? (0) | 2020.04.28 |
산점도를 위해 개별 태그를 넣는 방법 (0) | 2020.04.28 |