“.NET Core”란 무엇입니까?


323

최근 공식 .NET Framework 블로그 에서 .NET Core가 오픈 소스가 될 것이라고 발표되었습니다 .

아이러니하게도, 저자는 것을 언급 무엇 .NET 핵심은 다음 게시물에서 설명 될 것이다. 더 자세한 내용은 다른 공지 사항 게시물에 언급되어 있습니다.

제공된 다이어그램에서 :

.NET 코어 다이어그램

기사 텍스트 자체에 따르면 .NET Core (오픈 소스와 같은 명백한 것 외에도)는 전체 .NET을 모듈 식으로 다시 구현 한 것으로 가정합니다. 즉, NuGet 패키지가 현재로드되는 것처럼 프레임 워크 구성 요소가 필요에 따라로드됩니다. 이제 ASP.NET 5는 이미 구현 된 모듈 중 하나입니다. .NET Core에 대한 이해가 정확합니까? 어쩌면 내가 뭔가를 놓치고 있습니까?


나는 짧고 아주 좋은 최근 기사 를 발견 했습니다 . .NET Standard, .NET Core 및 .NET Framework와 그 관계를 다룹니다. 나는 그것을 강력히 추천합니다.


5
여기 blogs.msdn.com/b/dotnet/archive/2014/12/04/… 에 관한 새로운 블로그 게시물이 있지만 그 다이어그램을 이해하기는 여전히 어렵습니다. WPF와 WinForms가 .NET Core를 사용할 수 없다는 것을 의미합니까?
dodgy_coder

@dodgy_coder 결국에는 Apps 및 ASP.NET 5가 새로운 프레임 워크 아키텍처를 사용하는 것이 첫 번째 일 뿐이라고 생각합니다.
Petr Abdulin

1
@dodgy_coder, 맞아. 현재 WPF 및 WinForms 앱은 .net 코어로 이식 할 수 없습니다. Windows 유니버설 앱으로 다시 개발 될 수 있습니다. 참조 : blogs.msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core
VivekDev

답변:


154

.NET 블로그 .NET 2015 Preview 발표 : .NET의 새로운 시대 :

.NET Core에는 두 가지 주요 구성 요소가 있습니다. .NET Framework CLR과 동일한 코드베이스에서 빌드 된 작은 런타임이 포함되어 있습니다. .NET Core 런타임에는 동일한 GC 및 JIT (RyuJIT)가 포함되지만 애플리케이션 도메인 또는 코드 액세스 보안과 같은 기능은 포함되지 않습니다. 런타임은 [ASP.NET Core] 패키지의 일부로 NuGet을 통해 제공됩니다.

.NET Core에는 기본 클래스 라이브러리도 포함되어 있습니다. 이 라이브러리는 .NET Framework 클래스 라이브러리와 거의 동일한 코드이지만 더 작은 라이브러리 세트를 제공 할 수 있도록 팩터링되었습니다 (종속성 제거). 이러한 라이브러리는 NuGet.org에 System. * NuGet 패키지로 제공됩니다.

과:

[ASP.NET Core]는 .NET Core를 채택한 첫 번째 워크로드입니다. [ASP.NET Core]는 .NET Framework와 .NET Core에서 모두 실행됩니다. [ASP.NET Core]의 핵심 가치는 동일한 컴퓨터에서 여러 버전의 [.NET Core]에서 실행될 수 있다는 것입니다. 웹 사이트 A와 웹 사이트 B는 동일한 컴퓨터에서 서로 다른 두 가지 버전의 .NET Core에서 실행되거나 동일한 버전을 사용할 수 있습니다.

간단히 말해서, 먼저, 응용 프로그램 및 라이브러리 코드를 실행하는 런타임과 거의 완전히 문서화 된 표준 클래스 라이브러리 로 구성된 Microsoft .NET Framework 가있었습니다 .

런타임은 Common Language Runtime으로 , Common Language Infrastructure 를 구현하며 JIT 컴파일러 와 함께 작동 하여 CIL (이전의 MSIL) 바이트 코드 를 실행합니다 .

Microsoft의 .NET 사양 및 구현은 그 역사와 목적을 감안할 때 매우 Windows 및 IIS 중심이며 "지방"이었습니다. 거기 적은 도서관, 네임 스페이스와 유형 변화 ,하지만 그들 중 몇은 웹 또는 데스크톱 개발을위한 유용했다 또는이다 귀찮은 법적 관점에서 포트 .

따라서 Windows 이외의 시스템에서 실행될 수있는 Microsoft 이외의 .NET 버전을 제공하려면 대안을 개발해야했습니다. 이를 위해 런타임을 포팅해야 할뿐만 아니라 전체 프레임 워크 클래스 라이브러리를 잘 채택해야합니다. 또한 Microsoft와 완전히 독립적이기 위해서는 가장 일반적으로 사용되는 언어의 컴파일러가 필요합니다.

Mono 는 Windows 이외의 다양한 OS에서 실행 되는 런타임 의 유일한 대체 구현은 아니지만 .NET 4.5의 Framework 클래스 라이브러리VBC # 컴파일러의 거의 모든 네임 스페이스 중 하나 입니다.

.NET Core : 런타임 의 오픈 소스 구현 및 최소 기본 클래스 라이브러리를 입력하십시오. 모든 추가 기능은 NuGet 패키지를 통해 제공되므로 응용 프로그램 자체와 함께 특정 런타임, 프레임 워크 라이브러리 및 타사 패키지를 배포합니다.

ASP.NET Core는 .NET Core 런타임과 .NET Framework에서 실행되는 씬 HTTP 서버 추상화와 함께 번들로 제공되는 MVC 및 WebAPI의 새로운 버전입니다.


4
오, 그게 내가 그리웠 어! 블로그 타임 라인에서 실제로 아래에있었습니다! 부끄러운 일 ..
Petr Abdulin

17
그것은 모두 꽤 새로운 것들이며 간신히 묘사되어 있습니다. 좋은 질문을했다고 생각합니다. :)
CodeCaster

3
두 번째 생각은 설명이 여전히 간단하기 때문에 "다음 게시물"이 아닌 것 같습니다.
Petr Abdulin

2
이것이 기본적으로 vNext가 우리에게 가져다 준 것이 아닙니까?
ps2goat

3
우리는 그들이 nuget을 통해 프레임 워크를 게시하기 시작한 이후로 그렇게했습니다. 해당 게시물의 해결 방법이 필요하지 않습니다.
ps2goat

84

Compact Framework 버전으로 시작된 .NET Framework의 하위 집합입니다. Silverlight, Windows Store 및 Windows Phone으로 진행되었습니다. 스토리지 용량이 제한적인 빠른 다운로드 및 장치에 적합한 소규모 배포에 중점을 두었습니다. Windows 이외의 플랫폼을 사용하는 것이 더 쉬우 며, 이것이 오픈 소스 에디션으로 선택된 이유입니다. CLR 및 기본 클래스 라이브러리의 "어려운"부분과 "비싼"부분은 생략되었습니다.

그렇지 않으면, 많은 프레임 워크 버전이 누락 될 수 있으므로 이러한 프레임 워크 버전을 대상으로 할 때 항상 쉽게 알 수 있습니다. 런타임에서 지원되는 항목 만 노출하는 고유 한 참조 어셈블리 세트를 사용하게됩니다. 시스템의 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore디렉토리 에 저장됩니다 .


업데이트 : .NET Core 2.0 릴리스 후 적절한 통찰력을 제공하는 대표적인 숫자를 보았습니다. 지난 2 년 동안 프레임 워크 API를 .NET Core로 백 포팅하는 데 어려움을 겪었습니다. .NET Core 1.0은 원래 13,000 API를 지원했습니다. .NET Core 2.0에는 20,000 개의 API가 추가되어 총 32,000 개를 가져오고 기존 NuGet 패키지의 약 70 %를 이식 할 수 있습니다. Linux 및 MacOS로 쉽게 포팅하기에는 Windows에 너무 많이 결합 된 API 세트가 있습니다. 최근에 출시 된 Windows 호환 기능 팩이 적용되어 추가로 20,000 개의 API가 추가되었습니다.


4
블로그 게시물에서 나는 이것이 다른 '컴팩트'프레임 워크 버전처럼 보이는 것을 말하지 않을 것입니다. .NET Core최신 풀 프레임 워크보다 높은 버전 5.0이 발표되었습니다 . 나는 그들이 다른 것을 의미한다고 가정합니다.
Petr Abdulin

5
방금 .NETCore 버전의 기록을 설명했습니다. 태양 아래서 새로운 것은 없었으며 오랫동안 주변에있었습니다. 5.0의 변화는 점진적이며, 새로운 RyuJIT x64 지터는 지금 내가 생각할 수있는 유일한 것입니다. 라이센스 변경 만이 새로운 것입니다 :)
Hans Passant

3
나는 당신의 요점을 얻었다. 여전히 .NET의 다음 시대로 프레임 워크 하위 집합을 발표하는 것이 약간 대담하다고 생각합니다.
Petr Abdulin

50

나는 짧고 아주 좋은 최근 기사 를 발견 했습니다 . .NET Standard, .NET Core 및 .NET Framework와 그 관계를 다룹니다. 나는 그것을 강력히 추천합니다. 불행히도, 나는 그것을 적응시키고 여기에 넣을 시간이 없습니다.

아래의 원본 답변 내용 :


따라서 주제 에 대한 최신 공식 항목 을 바탕 으로 내가 볼 때 몇 가지 핵심 사항이 있습니다.

.NET Core는 기본적으로 .NET Framework의 포크이며, 구현은 팩터링 문제와 관련하여 최적화됩니다.

우리는 .NET Core가 .NET Native 나 ASP.NET 5에만 국한되지 않는다고 생각합니다. BCL과 런타임은 범용이며 모듈 식으로 설계되었습니다. 따라서 향후 모든 .NET 업종의 기반을 형성합니다.

따라서 .NET Native와 ASP.NET 5는 새로운 프레임 워크 구성에 대한 테스트 "주체"일뿐입니다.

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

하위 레벨도 별도로 필요하지만 BCL의 주요 부분은 여전히 ​​일반적입니다.

우리는 .NET Core가 .NET Native 나 ASP.NET 5에만 국한되지 않는다고 생각합니다. BCL과 런타임은 범용이며 모듈 식으로 설계되었습니다. 따라서 향후 모든 .NET 업종의 기반을 형성합니다.

즉, 상단에 자홍색 사각형이 새로운 앱 모델과 함께 대량으로 추가되지만 기본은 공통으로 유지됩니다.

NuGet 배포 :

.NET Framework와 달리 .NET Core 플랫폼은 NuGet 패키지 세트로 제공됩니다. 우리는 도서관 생태계의 대부분이 이미 존재하기 때문에 NuGet에 정착했습니다.

현재 프레임 워크와의 관계 :

Visual Studio 2015의 목표는 .NET Core가 .NET Framework의 순수한 하위 집합인지 확인하는 것입니다. 즉, 기능 차이가 없습니다. Visual Studio 2015가 릴리스 된 후에는 .NET Core가 .NET Framework보다 더 빨리 버전이 나올 것으로 기대합니다. 이는 기능이 .NET Core 기반 플랫폼에서만 사용 가능한 시점이 있음을 의미합니다.

요약:

.NET Core 플랫폼은 NuGet에서의 공개 소스 개발 및 민첩한 전달에 최적화 된 새로운 .NET 스택입니다. 우리는 Windows, Linux 및 Mac에서 Mono 커뮤니티를 훌륭하게 만들기 위해 Mono 커뮤니티와 협력하고 있으며 Microsoft는 세 가지 플랫폼 모두에서이를 지원할 것입니다.

우리는 .NET Framework가 엔터프라이즈 급 개발에 제공하는 가치를 유지하고 있습니다. 테스트하고 함께 지원하는 NuGet 패키지 세트를 나타내는 .NET Core 배포판을 제공합니다. Visual Studio는 개발을위한 원 스톱 상점입니다. 배포의 일부인 NuGet 패키지를 사용하려면 인터넷 연결이 필요하지 않습니다.

기본적으로 이것은 배포 모델이 변경된 .NET 4.6으로 생각할 수 있으며 동시에 오픈 소스가되는 과정에 있습니다.


22

현재 설명서 에는 .NET Core가 무엇인지, 사용할 영역 등이 잘 설명되어 있습니다. 다음 특성은 .NET Core를 가장 잘 정의합니다.

유연한 배포 : 앱에 포함되거나 나란히 사용자 또는 컴퓨터 전체에 설치 될 수 있습니다.

크로스 플랫폼 : Windows, macOS 및 Linux에서 실행됩니다. 다른 OS로 이식 할 수 있습니다. 지원되는 운영 체제 (OS), CPU 및 응용 프로그램 시나리오는 Microsoft, 다른 회사 및 개인이 제공하는 시간이 지남에 따라 커질 것입니다.

명령 줄 도구 : 모든 제품 시나리오는 명령 줄에서 연습 할 수 있습니다.

호환 가능 : .NET Core는 .NET 표준 라이브러리를 통해 .NET Framework, Xamarin 및 Mono와 호환됩니다.

오픈 소스 : .NET Core 플랫폼은 MIT 및 Apache 2 라이센스를 사용하는 오픈 소스입니다. 문서는 CC-BY에 따라 라이센스가 부여됩니다. .NET Core는 .NET Foundation 프로젝트입니다.

Microsoft에서 지원 : .NET Core는 .NET Core 지원에 따라 Microsoft에서 지원합니다.

.NET Core에는 다음이 포함됩니다.

형식 시스템, 어셈블리로드, 가비지 수집기, 기본 상호 운용성 및 기타 기본 서비스를 제공하는 .NET 런타임

기본 데이터 유형, 애플리케이션 구성 유형 및 기본 유틸리티를 제공하는 프레임 워크 라이브러리 세트.

.NET Core SDK에서 사용할 수있는 기본 개발자 환경을 지원하는 SDK 도구 및 언어 컴파일러 세트입니다.

.NET Core 응용 프로그램을 시작하는 데 사용되는 'dotnet'응용 프로그램 호스트 런타임을 선택하고 런타임을 호스팅하고 어셈블리 로딩 정책을 제공하고 앱을 시작합니다. 동일한 호스트를 사용하여 SDK 도구를 거의 동일한 방식으로 실행할 수 있습니다.


19

.NET Core는 Mono와 유사하지만 Microsoft 자체에서 수행하는 .NET 표준 (ECMA 335)의 새로운 크로스 플랫폼 구현입니다.

docs.microsoft.com 참조


18

Microsoft는 향후 웹 오픈 소스 패러다임을 인식하고 .NET을 다른 운영 체제에 공개하기로 결정했습니다. .NET Core는 Mac 및 Linux 용 .NET Framework입니다. "경량".NET Framework이므로 일부 기능 / 라이브러리가 없습니다.

Windows에서는 여전히 .NET Framework 및 Visual Studio 2015를 실행합니다. .NET Core는 Node.js , npm, Yeoman , Docker 와 같은 오픈 소스 세계와 더 친숙합니다. .

이전에는 불가능했던 Visual Studio Code + .NET Core를 사용하여 Mac 또는 Linux에서 본격적인 웹 사이트 및 RESTful API를 개발할 수 있습니다. 따라서 Mac 또는 Ubuntu를 좋아하고 .NET 개발자 인 경우 계속 진행하십시오.

들어 모노 대 .NET 코어, 모노 이제 마이크로 소프트에 인수 (회사라고 Linux 용 .NET 프레임 워크로 개발 된 자 마린을 ) 및 모바일 개발에 사용됩니다. 결국 Microsoft는 Mono를 .NET Core로 병합 / 마이그레이션 할 수 있습니다. 나는 지금 모노에 대해 걱정하지 않을 것입니다.


12

오늘 Visual Studio 2017에서 새 프로젝트를 만들려고했지만 (Visual Studio 2015에서 최근 업그레이드 됨) 프로젝트 유형에 대한 새로운 선택 항목이 나타났습니다. 그들이 새로운 프로젝트이거나 새로운 프로젝트를 시작한 이래로 오랜만에 !! :)

Visual Studio 스크린 샷

나는 이 문서 링크 를 발견하고 매우 유용하다는 것을 알았으므로 공유하고 있습니다. 글 머리 기호의 세부 사항도 기사에 제공됩니다. 나는 여기에 총알을 게시하고 있습니다.

다음과 같은 경우 서버 응용 프로그램에 .NET Core를 사용해야합니다.

You have cross-platform needs.
You are targeting microservices.
You are using Docker containers.
You need high performance and scalable systems.
You need side by side of .NET versions by application.

다음과 같은 경우 서버 응용 프로그램에 .NET Framework를 사용해야합니다.

Your application currently uses .NET Framework (recommendation is to extend instead of migrating)
You need to use third-party .NET libraries or NuGet packages not available for .NET Core.
You need to use .NET technologies that are not available for .NET Core.
You need to use a platform that doesnt support .NET Core.

이 링크 는 .NET 용어집을 제공합니다.


11

에서 마이크로 소프트의 웹 사이트 :

.NET Core는 .NET Core, ASP.NET Core 및 Entity Framework Core를 포함한 여러 기술을 나타냅니다.

이러한 기술은 Universal Windows 플랫폼 에서 사용되는 CoreCLR 런타임을 사용하여 실행된다는 점에서 기본 .NET과 다릅니다 .

귀하의 질문에서 언급했듯이 .NET Core는 오픈 소스 일뿐 만 아니라 이식 가능합니다. [MacOS, Windows 및 Linux에서 실행]

.NET Core의 내부는 응용 프로그램에서 요구하지 않는 한 핵심 라이브러리와 다른 모듈을 사용하지 않도록 최적화되었습니다.


4
".NET Core는 .NET Core를 포함한 여러 기술을 의미합니다"... 훌륭한 것
Kieren Johnstone

3

마이크로 소프트는 .NET Core v3.0을 발표했다.

자세한 내용은 2019 년 4 월의 .NET Framework와 .NET Core의 차이점을 참조하십시오 .


3
링크 전용 답변과 주로 의견 기반 답변은 사용 하지 않는 것이 좋습니다 . 참조하시기 바랍니다 meta.stackexchange.com/a/8259
더블 비프

내가 의견 부분을 편집했습니다. 알려 주셔서 감사합니다.
itsikha

1
어떤 방법으로 개선 되었습니까? 가장 중요한 변경 사항 및 추가 사항에 대한 요약 정보를 제공 할 수 있습니까?
Peter Mortensen

3

.NET Core는 Windows, Linux 및 macOS 운영 체제를위한 무료 오픈 소스 관리 형 컴퓨터 소프트웨어 프레임 워크입니다. .NET Framework의 후속 플랫폼 인 오픈 소스입니다.

.NET Core 애플리케이션은 Windows, Linux 및 macOS에서 지원됩니다. 간단히 말해서 .NET Core는 .NET 프레임 워크와 유사하지만 플랫폼 간입니다. 즉, .NET 응용 프로그램을 Windows, Linux 및 MacOS에서 실행할 수 있습니다. .NET Framework 응용 프로그램은 Windows 시스템에서만 실행할 수 있습니다. 따라서 .NET 프레임 워크와 .NET 코어의 기본적인 차이점은 .NET Core는 크로스 플랫폼이며 .NET 프레임 워크는 Windows에서만 실행된다는 것입니다.

또한 .NET Core에는 Microsoft의 기본 제공 종속성 주입이 있으며 종속성 주입을 위해 타사 소프트웨어 / DLL 파일을 사용할 필요가 없습니다.


1
의존성 주입에 대해 자세히 설명해 주시겠습니까? 이 맥락에서 이것이 실제로 무엇을 의미합니까? 특정 프레임 워크를 언급하고 있습니까? 당신은 몇 가지 참조 / 링크가 있습니까?
Peter Mortensen

1

.NET Core는 .NET의 오픈 소스 및 크로스 플랫폼 버전입니다. Microsoft 제품은 뛰어난 기능 외에 일반 사용자, 특히 .NET 기술로 만든 제품의 최종 사용자에게는 항상 비쌌습니다.

저급 고객의 대부분은 Linux를 OS로 사용하는 것을 선호하고 .NET Core 이전에는 Microsoft 기술의 큰 능력에도 불구하고 Microsoft 기술을 사용하고 싶지 않습니다. 그러나 .NET Core 생산 후이 문제가 완전히 해결되어 OS 등을 고려하지 않고 고객을 만족시킬 수 있습니다.


완전히 해결되지 않았습니다. Linux 에서 Windows Forms 또는 WPF 응용 프로그램을 사용하는 데 어려움 을 겪을 것입니다.
Peter Mortensen

0

.NET Core는 .NET Framework의 오픈 소스 및 크로스 플랫폼 버전입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.