.NET .NET Core là gì?


323

Gần đây, trong một Blog .NET Framework chính thức , đã có thông báo rằng .NET Core sẽ là nguồn mở .

Trớ trêu thay, tác giả đề cập rằng những gì NET Core sẽ được giải thích trong bài viết tiếp theo. Một số chi tiết được đề cập trong một bài thông báo khác .

Từ một sơ đồ được cung cấp:

Sơ đồ .NET Core

và chính bài viết, tôi cho rằng .NET Core (bên cạnh những thứ rõ ràng như nguồn mở) là một triển khai lại mô-đun của .NET đầy đủ. Các thành phần khung nghĩa là được tải khi cần thiết, giống như các gói NuGet được tải ngay bây giờ. Và bây giờ ASP.NET 5 là một trong những mô-đun đã được triển khai. Sự hiểu biết của tôi về .NET Core có đúng không? Có lẽ tôi đang thiếu một cái gì đó?


Tôi đã tìm thấy một bài viết gần đây mà tôi thấy cả ngắn và rất tốt. Nó bao gồm .NET Standard, .NET Core và .NET Framework và mối quan hệ của chúng. Tôi khuyên bạn nên nó.


5
Có một bài đăng blog mới ở đây về nó blog.msdn.com/b/dotnet/archive/2014/12/04/ Khăn nhưng vẫn khó hiểu sơ đồ đó. Điều đó có nghĩa là WPF và WinForms không thể sử dụng .NET Core chẳng hạn?
dodgy_coder

@dodgy_coder Tôi nghĩ rằng cuối cùng, họ sẽ biết rằng Store Apps và ASP.NET 5 là những người đầu tiên sử dụng kiến ​​trúc khung mới.
Petr Abdulin

1
@dodgy_coder, Đúng rồi. Cho đến nay, các ứng dụng WPF và WinForms không thể di chuyển đến lõi .net. Chúng có thể được phát triển lại thành các ứng dụng phổ quát của windows. Thấy điều này: blogs.msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core
VivekDev

Câu trả lời:


154

Từ blog .NET Thông báo Bản xem trước .NET 2015: Kỷ nguyên mới cho .NET :

.NET Core có hai thành phần chính. Nó bao gồm một thời gian chạy nhỏ được xây dựng từ cùng một cơ sở mã như .NET Framework CLR. Thời gian chạy .NET Core bao gồm cùng một GC và JIT (RyuJIT), nhưng không bao gồm các tính năng như Miền ứng dụng hoặc Bảo mật truy cập mã. Thời gian chạy được phân phối qua NuGet, như một phần của gói [ASP.NET Core].

.NET Core cũng bao gồm các thư viện lớp cơ sở. Các thư viện này phần lớn có cùng mã với các thư viện lớp .NET Framework, nhưng đã được tính đến (loại bỏ các phụ thuộc) để cho phép chúng tôi gửi một bộ thư viện nhỏ hơn. Các thư viện này được vận chuyển dưới dạng gói. * NuGet trên NuGet.org.

Và:

[ASP.NET Core] là khối lượng công việc đầu tiên đã áp dụng .NET Core. [ASP.NET Core] chạy trên cả .NET Framework và .NET Core. Giá trị chính của [ASP.NET Core] là nó có thể chạy trên nhiều phiên bản [.NET Core] trên cùng một máy. Trang web A và trang web B có thể chạy trên hai phiên bản .NET Core khác nhau trên cùng một máy hoặc chúng có thể sử dụng cùng một phiên bản.

Tóm lại: đầu tiên, có Microsoft .NET Framework , bao gồm một bộ thực thi thực thi mã ứng dụng và mã thư viện và một thư viện lớp tiêu chuẩn gần như được ghi lại đầy đủ .

Thời gian chạy là Runtime Ngôn ngữ chung , thực hiện Cơ sở hạ tầng ngôn ngữ chung , hoạt động với trình biên dịch JIT để chạy mã byte CIL (trước đây là MSIL) .

Đặc điểm kỹ thuật và việc triển khai .NET của Microsoft, dựa trên lịch sử và mục đích của nó, rất tập trung vào Windows và IIS và "béo". Có các biến thể với ít thư viện, không gian tên và loại , nhưng một vài trong số chúng hữu ích cho phát triển web hoặc máy tính để bàn hoặc gây rắc rối cho cổng từ quan điểm pháp lý .

Vì vậy, để cung cấp phiên bản .NET không phải của Microsoft, có thể chạy trên các máy không chạy Windows, một giải pháp thay thế đã được phát triển. Không chỉ thời gian chạy phải được chuyển cho điều đó, mà toàn bộ Thư viện lớp khung để được chấp nhận. Trên hết, để độc lập hoàn toàn với Microsoft, một trình biên dịch cho các ngôn ngữ được sử dụng phổ biến nhất sẽ được yêu cầu.

Mono là một trong số ít, nếu không phải là triển khai thay thế duy nhất của thời gian chạy , chạy trên nhiều hệ điều hành khác nhau ngoài Windows, hầu như tất cả các không gian tên từ Thư viện lớp Framework kể từ .NET 4.5trình biên dịch VBC # .

Nhập .NET Core: triển khai mã nguồn mở của thời gian chạy và thư viện lớp cơ sở tối thiểu. Tất cả các chức năng bổ sung được phân phối thông qua các gói NuGet, triển khai thời gian chạy cụ thể, thư viện khung và các gói của bên thứ ba với chính ứng dụng.

ASP.NET Core là phiên bản mới của MVC và WebAPI, được gói cùng với một bản tóm tắt máy chủ HTTP mỏng, chạy trên thời gian chạy .NET Core - nhưng cũng trên .NET Framework.


4
Ồ, đó là cách tôi đã bỏ lỡ nó! Nó thực sự ở dưới dòng thời gian của blog! Thật xấu hổ ..
Petr Abdulin

17
Đó là tất cả những thứ khá mới và hầu như không được mô tả, tôi nghĩ bạn đã hỏi một câu hỏi hay. :)
CodeCaster

3
Về ý nghĩ thứ hai có vẻ như đó không phải là "bài tiếp theo", vì mô tả vẫn còn khá ngắn gọn.
Petr Abdulin

2
Đây không phải là những gì vNext mang lại cho chúng ta sao?
ps2goat

3
Chúng tôi đã làm điều đó kể từ khi họ bắt đầu xuất bản khung thông qua nuget. Không cần cách giải quyết trong bài viết đó.
ps2goat

84

Nó là một tập hợp con của .NET Framework, được bắt đầu với phiên bản Compact Framework. Nó đã phát triển thành Silverlight, Windows Store và Windows Phone. Nó tập trung vào việc giữ cho việc triển khai nhỏ, phù hợp để tải xuống nhanh chóng và các thiết bị có khả năng lưu trữ hạn chế. Và nó dễ dàng hơn để đưa lên các nền tảng không phải Windows, và chắc chắn đây là lý do nó được chọn là phiên bản nguồn mở. Các phần "khó" và "đắt" của CLR và các thư viện lớp cơ sở bị bỏ qua.

Mặt khác, luôn dễ dàng nhận ra khi bạn nhắm mục tiêu một phiên bản khung như vậy, bởi vì rất nhiều tính năng sẽ bị thiếu. Bạn sẽ sử dụng một tập hợp các tham chiếu riêng biệt chỉ hiển thị những gì được hỗ trợ bởi thời gian chạy. Nó được lưu trữ trên máy của bạn trong C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCorethư mục.


Cập nhật: sau khi phát hành .NET Core 2.0, tôi đã thấy một số con số đại diện mang lại cái nhìn sâu sắc. Họ đã rất nỗ lực trong việc chuyển các API khung công tác back-port sang .NET Core trong hai năm qua. .NET Core 1.0 ban đầu hỗ trợ 13.000 API. .NET Core 2.0 đã thêm 20.000 API, nâng tổng số lên 32.000 và cho phép khoảng 70% các gói NuGet hiện tại được chuyển. Có một bộ API được kết hợp quá nhiều với Windows để dễ dàng chuyển sang Linux và MacOS. Được bao phủ bởi Gói tương thích Windows được phát hành gần đây, nó bổ sung thêm 20.000 API.


4
Từ bài đăng trên blog, tôi sẽ không nói cái này trông giống như một phiên bản khung 'nhỏ gọn' khác. Được công bố .NET Corelà phiên bản 5.0 cao hơn khung đầy đủ mới nhất. Tôi cho rằng họ có nghĩa là một cái gì đó khác nhau.
Petr Abdulin

5
Tôi chỉ mô tả lịch sử của phiên bản .NETCore. Không có gì mới dưới ánh mặt trời, nó đã có từ rất lâu. Các thay đổi trong 5.0 là gia tăng, jitter RyuJIT x64 mới là thứ duy nhất tôi có thể nghĩ ra ngay bây giờ. Chỉ có thay đổi giấy phép là thực sự mới :)
Hans Passant

3
Tôi có điểm số của bạn. Mặc dù tôi vẫn nghĩ rằng việc công bố tập hợp khung như thời kỳ tiếp theo của .NET là một chút táo bạo.
Petr Abdulin

50

Tôi đã tìm thấy một bài viết gần đây mà tôi thấy cả ngắn và rất tốt. Nó bao gồm .NET Standard, .NET Core và .NET Framework và mối quan hệ của chúng. Tôi khuyên bạn nên nó. Thật không may, tôi không có thời gian để thích nghi và đặt nó ở đây.

Nội dung câu trả lời gốc dưới đây:


Vì vậy, dựa trên mục chính thức mới nhất về chủ đề này, đây là một số điểm chính mà tôi thấy chúng:

.NET Core về cơ bản là một nhánh của .NET Framework mà việc triển khai cũng được tối ưu hóa xung quanh các mối quan tâm bao thanh toán.

Chúng tôi nghĩ rằng .NET Core không đặc trưng cho cả .NET Native hay ASP.NET 5 - BCL và thời gian chạy là mục đích chung và được thiết kế theo dạng mô-đun. Như vậy, nó tạo thành nền tảng cho tất cả các ngành dọc .NET trong tương lai.

Vì vậy, .NET Native và ASP.NET 5 chỉ là một "đối tượng" thử nghiệm cho cấu hình khung mới, một phần điều này có thể do chúng khá khác nhau:

Nhập mô tả hình ảnh ở đây

Hãy xem, họ thậm chí cần cấp thấp riêng biệt, nhưng một phần chính của BCL vẫn còn phổ biến:

Chúng tôi nghĩ rằng .NET Core không đặc trưng cho cả .NET Native hay ASP.NET 5 - BCL và thời gian chạy là mục đích chung và được thiết kế theo dạng mô-đun. Như vậy, nó tạo thành nền tảng cho tất cả các ngành dọc .NET trong tương lai.

Tức là, hình chữ nhật màu đỏ trên đầu sẽ được thêm ồ ạt với Mô hình ứng dụng mới, nhưng cơ sở sẽ vẫn phổ biến.

Triển khai NuGet:

Trái ngược với .NET Framework, nền tảng .NET Core sẽ được phân phối dưới dạng một tập các gói NuGet. Chúng tôi đã định cư trên NuGet vì đó là nơi có phần lớn hệ sinh thái thư viện.

Mối quan hệ với các khung hiện tại:

Đối với Visual Studio 2015, mục tiêu của chúng tôi là đảm bảo rằng .NET Core là một tập hợp con thuần túy của .NET Framework. Nói cách khác, sẽ không có bất kỳ khoảng trống tính năng nào. Sau khi Visual Studio 2015 được phát hành, chúng tôi kỳ vọng rằng .NET Core sẽ có phiên bản nhanh hơn .NET Framework. Điều này có nghĩa là sẽ có những thời điểm mà một tính năng sẽ chỉ khả dụng trên các nền tảng dựa trên .NET Core.

Tóm lược:

Nền tảng .NET Core là một ngăn xếp .NET mới được tối ưu hóa để phát triển nguồn mở và phân phối nhanh trên NuGet. Chúng tôi đang làm việc với cộng đồng Mono để làm cho nó trở nên tuyệt vời trên Windows, Linux và Mac và Microsoft sẽ hỗ trợ nó trên cả ba nền tảng.

Chúng tôi đang giữ lại các giá trị mà .NET Framework mang lại để phát triển lớp doanh nghiệp. Chúng tôi sẽ cung cấp các bản phân phối .NET Core đại diện cho một bộ các gói NuGet mà chúng tôi đã thử nghiệm và hỗ trợ cùng nhau. Visual Studio vẫn là nơi duy nhất để bạn phát triển. Việc sử dụng các gói NuGet là một phần của phân phối không yêu cầu kết nối Internet.

Về cơ bản, điều này có thể được coi là .NET 4.6 với mô hình phân phối đã thay đổi, đồng thời, đang trong quá trình trở thành nguồn mở.


22

Tài liệu hiện tại có một lời giải thích tốt về .NET Core là gì, các khu vực sẽ sử dụng, v.v. Các đặc điểm sau xác định tốt nhất .NET Core:

Triển khai linh hoạt : Có thể được bao gồm trong ứng dụng của bạn hoặc được cài đặt bên cạnh người dùng hoặc toàn máy.

Đa nền tảng : Chạy trên Windows, macOS và Linux; có thể được chuyển sang các hệ điều hành khác. Các hệ điều hành (HĐH) được hỗ trợ, CPU và các kịch bản ứng dụng sẽ phát triển theo thời gian, được cung cấp bởi Microsoft, các công ty và cá nhân khác.

Công cụ dòng lệnh : Tất cả các kịch bản sản phẩm có thể được thực hiện tại dòng lệnh.

Tương thích : .NET Core tương thích với .NET Framework, Xamarin và Mono, thông qua Thư viện chuẩn .NET.

Nguồn mở : Nền tảng .NET Core là nguồn mở, sử dụng giấy phép MIT và Apache 2. Tài liệu được cấp phép theo CC-BY. .NET Core là một dự án .NET Foundation.

Được hỗ trợ bởi Microsoft : .NET Core được Microsoft hỗ trợ, mỗi Hỗ trợ .NET Core

Và đây là những gì .NET Core bao gồm:

Một thời gian chạy .NET, cung cấp một hệ thống kiểu, tải lắp ráp, trình thu gom rác, khả năng tương tác riêng và các dịch vụ cơ bản khác.

Một tập hợp các thư viện khung, cung cấp các kiểu dữ liệu nguyên thủy, các kiểu thành phần ứng dụng và các tiện ích cơ bản.

Một bộ công cụ SDK và trình biên dịch ngôn ngữ cho phép trải nghiệm nhà phát triển cơ sở, có sẵn trong .NET Core SDK.

Máy chủ ứng dụng 'dotnet', được sử dụng để khởi chạy các ứng dụng .NET Core. Nó chọn thời gian chạy và lưu trữ thời gian chạy, cung cấp chính sách tải lắp ráp và khởi chạy ứng dụng. Máy chủ tương tự cũng được sử dụng để khởi chạy các công cụ SDK theo cách tương tự.


19

.NET Core là một triển khai đa nền tảng mới của các tiêu chuẩn .NET (ECMA 335) tương tự như Mono nhưng được thực hiện bởi chính Microsoft.

Xem docs.microsoft.com


18

Microsoft đã nhận ra mô hình nguồn mở web trong tương lai và quyết định mở .NET cho các hệ điều hành khác. .NET Core là .NET Framework cho Mac và Linux. Nó là một .NET .NET .NET nhẹ, vì vậy một số tính năng / thư viện bị thiếu.

Trên Windows, tôi vẫn sẽ chạy .NET Framework và Visual Studio 2015. .NET Core thân thiện hơn với thế giới nguồn mở như Node.js , npm, Yeoman , Docker , v.v.

Bạn có thể phát triển các trang web chính thức và API RESTful trên Mac hoặc Linux với Visual Studio Code + .NET Core mà trước đây không thể có. Vì vậy, nếu bạn yêu thích Mac hoặc Ubuntu và bạn là một nhà phát triển .NET, hãy tiếp tục và thiết lập nó.

Đối với Mono so với .NET Core, Mono được phát triển dưới dạng .NET Framework cho Linux, hiện được Microsoft (công ty có tên Xamarin ) mua lại và sử dụng trong phát triển di động. Cuối cùng, Microsoft có thể hợp nhất / di chuyển Mono sang .NET Core. Tôi sẽ không lo lắng về Mono ngay bây giờ.


12

Tôi đã cố gắng tạo một dự án mới trong Visual Studio 2017 ngày hôm nay (gần đây được nâng cấp từ Visual Studio 2015) và nhận thấy bộ lựa chọn mới cho loại dự án. Chúng mới hoặc đã được một thời gian kể từ khi tôi bắt đầu một dự án mới !! :)

Ảnh chụp màn hình Visual Studio

Tôi đã xem qua liên kết tài liệu này và thấy nó rất hữu ích, vì vậy tôi đang chia sẻ. Các chi tiết của viên đạn cũng được cung cấp trong bài viết. Tôi chỉ đăng những viên đạn ở đây:

Bạn nên sử dụng .NET Core cho ứng dụng máy chủ của mình khi:

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.

Bạn nên sử dụng .NET Framework cho ứng dụng máy chủ của mình khi:

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.

Liên kết này cung cấp một bảng chú giải thuật ngữ .NET.


11

Từ trang web của Microsoft :

.NET Core đề cập đến một số công nghệ bao gồm .NET Core, ASP.NET Core và Entity Framework Core.

Các công nghệ này khác với .NET gốc ở chỗ chúng chạy bằng thời gian chạy CoreCLR (được sử dụng trong Nền tảng Windows phổ quát ).

Như bạn đã đề cập trong câu hỏi của mình, .NET Core không chỉ là nguồn mở mà còn có khả năng di động [chạy trên MacOS, Windows và Linux]

Các phần bên trong của .NET Core cũng được tối ưu hóa để không sử dụng các mô-đun khác nhau từ thư viện lõi của nó trừ khi ứng dụng yêu cầu.


4
".NET Core đề cập đến một số công nghệ bao gồm .NET Core" ... những thứ tuyệt vời
Kieren Johnstone

3

Microsoft vừa công bố .NET Core v 3.0, đây là phiên bản cải tiến của .NET Core.

Để biết thêm chi tiết, hãy truy cập bài viết tuyệt vời này: Sự khác biệt giữa .NET Framework và .NET Core từ tháng 4 năm 2019.


3
Câu trả lời chỉ liên kết và câu trả lời chủ yếu dựa trên ý kiến ​​được khuyến khích mạnh mẽ . Vui lòng xem meta.stackexchange.com/a/8259
tiếng bíp đôi

Có điều đó, tôi đã chỉnh sửa phần ý kiến ​​.. cảm ơn đã cho tôi biết.
itikha

1
Cải thiện theo cách nào? Bạn có thể cung cấp một bản tóm tắt về những gì bạn nghĩ là những thay đổi và bổ sung quan trọng nhất?
Peter Mortensen

3

.NET Core là một khung phần mềm máy tính được quản lý miễn phí và mã nguồn mở cho các hệ điều hành Windows, Linux và macOS. Nó là một mã nguồn mở, kế thừa đa nền tảng cho .NET Framework.

Các ứng dụng .NET Core được hỗ trợ trên Windows, Linux và macOS. Tóm lại, .NET Core tương tự như .NET framework, nhưng nó là nền tảng chéo, tức là, nó cho phép các ứng dụng .NET chạy trên Windows, Linux và MacOS. Các ứng dụng .NET framework chỉ có thể chạy trên hệ thống Windows. Vì vậy, sự khác biệt cơ bản giữa .NET framework và .NET core là .NET Core là nền tảng chéo và .NET framework chỉ chạy trên Windows.

Hơn nữa, .NET Core có tính năng tiêm phụ thuộc tích hợp bởi Microsoft và bạn không phải sử dụng các tệp phần mềm / DLL của bên thứ ba để tiêm phụ thuộc.


1
Bạn có thể giải thích về việc tiêm phụ thuộc? Điều đó thực sự có ý nghĩa gì trong bối cảnh này? Bạn đang đề cập đến các khung cụ thể? Bạn có một số tài liệu tham khảo / liên kết?
Peter Mortensen

1

.NET Core là phiên bản mã nguồn mở và đa nền tảng của .NET. Các sản phẩm của Microsoft, bên cạnh những khả năng tuyệt vời mà chúng có, luôn đắt đỏ đối với người dùng thông thường, đặc biệt là người dùng cuối các sản phẩm được sản xuất bởi công nghệ .NET.

Hầu hết các khách hàng cấp thấp thích sử dụng Linux làm HĐH của họ và trước .NET Core, họ không muốn sử dụng các công nghệ của Microsoft, mặc dù khả năng tuyệt vời của họ. Nhưng sau khi sản xuất .NET Core, vấn đề này đã được giải quyết hoàn toàn và chúng tôi có thể làm hài lòng khách hàng của mình mà không cần xem xét hệ điều hành của họ, v.v.


Nó không được giải quyết hoàn toàn. Bạn sẽ có một thời gian khó khăn khi sử dụng ứng dụng Windows Forms hoặc WPF trên Linux.
Peter Mortensen

0

.NET Core là phiên bản mã nguồn mở và đa nền tảng của .NET Framework.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.