Sự khác biệt giữa .NET Core, .NET Framework và Xamarin là gì?


362

Microsoft hiện có .NET Core, .NET Framework và Xamarin (Mono) trong họ .NET.

Dường như có rất nhiều sự chồng chéo ở đây. Sự khác biệt giữa các loại .NET là gì? Khi nào tôi nên chọn sử dụng .NET Core trong dự án của mình, thay vì .NET Framework hoặc Xamarin?


2
Câu hỏi hay! Dưới đây là một bài viết bổ sung về khung .net và lõi .net. pogsdotnet.blogspot.sg/2017/11/ cảm ơn!
Allan Chua

Câu trả lời:


269

Bạn nên sử dụng .NET Core, thay vì .NET Framework hoặc Xamarin, trong 6 trường hợp điển hình sau theo tài liệu ở đây .

1. Nhu cầu đa nền tảng

Rõ ràng, nếu mục tiêu của bạn là có một ứng dụng (web / dịch vụ) có thể chạy trên các nền tảng (Windows, Linux và MacOS), thì sự lựa chọn tốt nhất trong hệ sinh thái .NET là sử dụng .NET Core làm thời gian chạy (CoreCLR) ) và các thư viện là đa nền tảng. Sự lựa chọn khác là sử dụng Dự án Mono.

Cả hai lựa chọn đều là nguồn mở, nhưng .NET Core được Microsoft hỗ trợ trực tiếp và chính thức và sẽ có một khoản đầu tư lớn trong tương lai.

Khi sử dụng .NET Core trên các nền tảng, trải nghiệm phát triển tốt nhất tồn tại trên Windows với Visual Studio IDE hỗ trợ nhiều tính năng năng suất bao gồm quản lý dự án, gỡ lỗi, kiểm soát nguồn, tái cấu trúc, chỉnh sửa phong phú bao gồm Intellisense, thử nghiệm và nhiều hơn nữa. Nhưng sự phát triển phong phú cũng được hỗ trợ bằng cách sử dụng Visual Studio Code trên Mac, Linux và Windows, bao gồm cả intellisense và gỡ lỗi. Ngay cả các biên tập viên bên thứ ba như Sublime, Emacs, VI và nhiều hơn nữa cũng hoạt động tốt và có thể có được trình soạn thảo intellisense bằng cách sử dụng dự án Omarnarp mã nguồn mở.

2. Dịch vụ kính hiển vi

Khi bạn đang xây dựng một hệ thống theo định hướng microservice bao gồm nhiều microservice độc ​​lập, có khả năng mở rộng, trạng thái hoặc trạng thái không trạng thái, lợi thế lớn mà bạn có ở đây là bạn có thể sử dụng các công nghệ / khung / ngôn ngữ khác nhau ở cấp độ dịch vụ. Điều đó cho phép bạn sử dụng phương pháp và công nghệ tốt nhất cho từng khu vực vi mô trong hệ thống của mình, vì vậy nếu bạn muốn xây dựng các dịch vụ siêu nhỏ rất hiệu quả và có thể mở rộng, bạn nên sử dụng .NET Core. Cuối cùng, nếu bạn cần sử dụng bất kỳ thư viện .NET Framework nào không tương thích với .NET Core, không có vấn đề gì, bạn có thể xây dựng microservice đó bằng .NET Framework và trong tương lai bạn có thể thay thế nó bằng .NET Cốt lõi.

Nền tảng cơ sở hạ tầng bạn có thể sử dụng rất nhiều. Lý tưởng nhất, đối với các hệ thống microservice lớn và phức tạp, bạn nên sử dụng Azure Service Fabric. Nhưng đối với các dịch vụ siêu nhỏ không trạng thái, bạn cũng có thể sử dụng các sản phẩm khác như Dịch vụ ứng dụng Azure hoặc Chức năng Azure.

Lưu ý rằng kể từ tháng 6 năm 2016, không phải mọi công nghệ trong Azure đều hỗ trợ .NET Core, nhưng hỗ trợ .NET Core trong Azure sẽ tăng lên đáng kể khi .NET Core được RTM phát hành.

3. Hệ thống hiệu suất và khả năng mở rộng tốt nhất

Khi hệ thống của bạn cần hiệu năng và khả năng mở rộng tốt nhất có thể để bạn có được khả năng phản hồi tốt nhất cho dù bạn có bao nhiêu người dùng, thì đó là nơi .NET Core và ASP.NET Core thực sự tỏa sáng. Bạn càng có thể làm với cùng một lượng cơ sở hạ tầng / phần cứng, bạn sẽ càng có nhiều trải nghiệm hơn cho người dùng cuối của mình - với chi phí thấp hơn.

Thời của những cải tiến hiệu năng của Moore đối với các CPU đơn lẻ không còn được áp dụng nữa; Tuy nhiên, bạn cần phải làm nhiều hơn trong khi hệ thống của bạn đang phát triển và cần khả năng mở rộng và hiệu suất cao hơn cho những người dùng khó tính hơn hàng ngày đang tăng theo cấp số nhân. Cuối cùng, bạn cần đạt được hiệu quả cao hơn, tối ưu hóa ở mọi nơi và mở rộng quy mô tốt hơn trên các cụm máy, VM và lõi CPU. Nó không chỉ là vấn đề về sự hài lòng của người dùng; nó cũng có thể tạo ra sự khác biệt lớn về chi phí / TCO. Đây là lý do tại sao điều quan trọng là phải phấn đấu cho hiệu suất và khả năng mở rộng.

Như đã đề cập, nếu bạn có thể cách ly các phần nhỏ trong hệ thống của mình dưới dạng microservice hoặc bất kỳ phương pháp kết nối lỏng lẻo nào khác, sẽ tốt hơn vì bạn không thể phát triển độc lập từng phần nhỏ / dịch vụ siêu nhỏ và có thời gian dài tốt hơn nhanh nhẹn và bảo trì, nhưng bạn cũng sẽ có thể sử dụng bất kỳ công nghệ nào khác ở cấp độ dịch vụ siêu nhỏ nếu những gì bạn cần làm không tương thích với .NET Core. Và cuối cùng, bạn có thể cấu trúc lại nó và mang nó đến .NET Core khi có thể.

4. Phát triển kiểu dòng lệnh cho Mac, Linux hoặc Windows.

Cách tiếp cận này là tùy chọn khi sử dụng .NET Core. Tất nhiên, bạn cũng có thể sử dụng IDE Visual Studio đầy đủ. Nhưng nếu bạn là một nhà phát triển muốn phát triển với các trình soạn thảo nhẹ và sử dụng nhiều dòng lệnh, .NET Core được thiết kế cho CLI. Nó cung cấp các công cụ dòng lệnh đơn giản có sẵn trên tất cả các nền tảng được hỗ trợ, cho phép các nhà phát triển xây dựng và thử nghiệm các ứng dụng với cài đặt tối thiểu trên các nhà phát triển, phòng thí nghiệm hoặc máy sản xuất. Các biên tập viên như Visual Studio Code sử dụng cùng các công cụ dòng lệnh cho trải nghiệm phát triển của họ. Và IDE như Visual Studio sử dụng cùng các công cụ CLI nhưng ẩn chúng đằng sau trải nghiệm IDE phong phú. Các nhà phát triển hiện có thể chọn mức độ họ muốn tương tác với chuỗi công cụ từ CLI đến trình chỉnh sửa sang IDE.

5. Cần bên cạnh các phiên bản .NET cho mỗi cấp độ ứng dụng.

Nếu bạn muốn có thể cài đặt các ứng dụng phụ thuộc vào các phiên bản khung khác nhau trong .NET, bạn cần sử dụng .NET Core cung cấp 100% cạnh nhau như được giải thích trước đây trong tài liệu này.

6. Ứng dụng Windows 10 UWP .NET.

Ngoài ra, bạn cũng có thể muốn đọc:

  1. Khi nào tôi KHÔNG nên sử dụng .NET Core?
  2. Khi nào tôi vẫn nên sử dụng .NET Framework 4.x, thay vì .NET Core?
  3. Khi nào tôi nên sử dụng Xamarin, thay vì .NET Core?

17
Tại sao asp.net Core có hiệu suất cao hơn? Tại sao tốt hơn khi bạn đang xây dựng microservice?
Juan Zamudio

4
Bây giờ Visual Studio cho Mac cũng có sẵn. Vì vậy, một điểm tích cực hơn đối với .NET Core. visualstudio.com/vs/visual-studio-mac
Husyn

8
Liên kết của bạn bị hỏng
shaneparsons

2
@JuanZamudio Các phiên bản của khung là các lớp nguyên khối, mỗi lớp phụ thuộc vào phiên bản trước đó ngay lập tức, trong chuỗi phụ thuộc trở lại phiên bản 2.0 đã thay thế hoàn toàn 1.1. Kết quả là, nếu bạn sử dụng bất cứ thứ gì từ 4.5, bạn hoàn toàn phụ thuộc vào mọi thứ trở lại 2.0. Khung Core liên quan nhiều hơn đến việc tái cấu trúc các phụ thuộc để loại bỏ hành lý không liên quan hơn là viết lại API, phần lớn nhưng không hoàn toàn không thay đổi. Một số thứ cũng được đơn giản hóa ồ ạt, như EF Core.
Peter Wone

Cảm ơn câu trả lời mô tả
Tolga Kartal

171

Đây là cách Microsoft giải thích nó:

.NET Framework, .NET Core, Xamarin

.NET Framework là hương vị "đầy đủ" hoặc "truyền thống" của .NET được phân phối với Windows. Sử dụng công cụ này khi bạn đang xây dựng ứng dụng Windows hoặc UWP trên máy tính để bàn hoặc làm việc với ASP.NET 4.6+ cũ hơn.

.NET Core là .NET đa nền tảng chạy trên Windows, Mac và Linux. Sử dụng điều này khi bạn muốn xây dựng bảng điều khiển hoặc ứng dụng web có thể chạy trên bất kỳ nền tảng nào, kể cả bên trong các container Docker. Điều này hiện không bao gồm các ứng dụng UWP / máy tính để bàn.

Xamarin được sử dụng để xây dựng các ứng dụng di động có thể chạy trên các thiết bị iOS, Android hoặc Windows Phone.

Xamarin thường chạy trên Mono , đây là phiên bản .NET được xây dựng để hỗ trợ đa nền tảng trước khi Microsoft quyết định chính thức chuyển sang đa nền tảng với .NET Core. Giống như Xamarin, nền tảng Unity cũng chạy trên đỉnh Mono.


Một điểm chung của sự nhầm lẫn là nơi ASP.NET Core phù hợp. ASP.NET Core có thể chạy trên .NET Framework (Windows) hoặc .NET Core (đa nền tảng), như chi tiết trong câu trả lời này: Sự khác biệt giữa ASP. NET Core (.NET Core) và ASP.NET Core (.NET Framework)


3
Bất cứ khi nào ai đó nói .NET Core là đa nền tảng, một nhà phát triển mới sẽ bị nhầm lẫn. '.NET Core' chỉ hỗ trợ UWP + ASP.NET Core & ASP.NET Core là đa nền tảng, UWP thì không.
Hassan Tareq

@HassanTareq Điều đó không hoàn toàn chính xác. .NET Core dùng để chỉ thời gian chạy và thư viện có thể chạy trên Windows, Mac hoặc Linux. ASP.NET Core là đa nền tảng vì .NET Core là đa nền tảng.
Nate Barbettini

Sau đó, sẽ rất hữu ích cho nhà kính nếu bạn đề cập rằng Mặc dù lõi .Net ( thời gian chạy và thư viện ) là nền tảng chéo, chúng tôi không thể sử dụng ứng dụng UWP trong Mac / Linux. UWP không phải là đa nền tảng, tôi dự kiến ​​UWP sẽ là sự thay thế đa nền tảng của WPF (Xamarin.Forms là)
Hassan Tareq

@HassanTareq Gợi ý tốt, tôi đã chỉnh sửa câu trả lời của mình.
Nate Barbettini

1
Xamarin Forms hiện chạy trên hầu hết mọi thứ từ một cơ sở mã. Máy tính để bàn Windows UWP, máy tính để bàn WPF, MacOS, iOS, Android và Tizen (TV). Mặc định là nhắm mục tiêu .NET Standard từ triển khai Core. Thời gian tốt!
Sean Anderson

35

Bạn có thể tham khảo trong dòng này - Sự khác biệt giữa ASP.NET Core (.NET Core) và ASP.NET Core (.NET Framework)

.NET Framework, .NET Core, Xamarin

Xamarin hoàn toàn không phải là một cuộc tranh luận. Khi bạn muốn xây dựng các ứng dụng di động (iOS, Android và Windows Mobile) bằng C #, Xamarin là lựa chọn duy nhất của bạn.

.NET Framework hỗ trợ các ứng dụng Windows và Web. Ngày nay, bạn có thể sử dụng Windows Forms, WPF và UWP để xây dựng các ứng dụng Windows trong .NET Framework. ASP.NET MVC được sử dụng để xây dựng các ứng dụng Web trong .NET Framework.

.NET Core là khung công tác mã nguồn mở và đa nền tảng mới để xây dựng các ứng dụng cho tất cả các hệ điều hành bao gồm Windows, Mac và Linux. .NET Core chỉ hỗ trợ UWP và ASP.NET Core. UWP được sử dụng để xây dựng Windows 10 nhắm vào các ứng dụng Windows và di động. ASP.NET Core được sử dụng để xây dựng các ứng dụng web dựa trên trình duyệt.

bạn muốn biết thêm chi tiết, hãy tham khảo các liên kết này
https://bloss.msdn.microsoft.com/dotnet/2016/07/15/net-core-roadmap/ https://docs.microsoft.com/en-us/dotnet/articles / tiêu chuẩn / lựa chọn-lõi-khung-máy chủ


12
  1. .NET là hệ sinh thái dựa trên ngôn ngữ c #
  2. .NET Standard là Standard (nói cách khác, đặc điểm kỹ thuật) của .NET Ecystem.

Thư viện lớp lõi .Net được xây dựng theo tiêu chuẩn .Net . .NET Standard, bạn chỉ có thể tạo dự án thư viện lớp không thể được thực thi độc lập và phải được tham chiếu bởi một dự án thực thi .NET Core hoặc .NET Framework khác . Nếu bạn muốn triển khai một thư viện có thể di chuyển đến .Net Framework , .Net CoreXamarin , chọn Thư viện chuẩn .Net

  1. .NET Framework là một khung dựa trên .NET và nó hỗ trợ các ứng dụng Windows và Web

(Bạn có thể tạo dự án thực thi (như ứng dụng Console hoặc ứng dụng ASP.NET) với .NET Framework

  1. ASP.NET là một công nghệ phát triển ứng dụng web được xây dựng trên .NET Framework
  2. .NET Core cũng là một khung dựa trên .NET .

Đây là khung công tác mã nguồn mở và đa nền tảng mới để xây dựng các ứng dụng cho tất cả các hệ điều hành bao gồm Windows, Mac và Linux.

  1. Xamarin là một khuôn khổ để phát triển ứng dụng di động đa nền tảng ( iOS, Android và Windows Mobile ) bằng C #

Hỗ trợ triển khai .NET Standard [màu xanh lam] và nền tảng khả thi tối thiểu để hỗ trợ đầy đủ cho .NET Standard (mới nhất: [ https://docs.microsoft.com/en-us/dotnet/stiteria/net-stiteria#net-im THỰCation- hỗ trợ] )


Bỏ phiếu cho bảng "Lịch sử Phiên bản". Đây không phải là "Lịch sử phiên bản" của .net / tiêu chuẩn hoặc lõi mà bạn đã sao chép. Đó là phiên bản nền tảng khả thi tối thiểu bạn có thể sử dụng nếu bạn muốn khớp với phiên bản tiêu chuẩn .Net cụ thể. EG: nếu bạn muốn hỗ trợ .NET Standard 1.4 trên Full .NET, phiên bản thấp nhất bạn có thể sử dụng là 4.6.1
Shawty

Bỏ phiếu xuống, bây giờ bạn đã cập nhật và ghi lại chính xác câu trả lời của mình :-)
Shawty

Hãy nghĩ rằng tôi sẽ chỉ phát triển trên Apple thay vì ...
Richard Hammond

7

.NET 5 sẽ là phiên bản hợp nhất của tất cả các biến thể .NET vào tháng 11 năm 2020, do đó sẽ không cần phải lựa chọn giữa các biến thể nữa. nhập mô tả hình ảnh ở đây


1
Đó là một lời nói dối. .NET Core không thể hỗ trợ WPF / WinForms trên Linux!
Vincent

Điều đó đúng, nhưng các biến thể khác của .NET cũng không hỗ trợ điều đó. Sự lựa chọn cho một biến thể của .NET không còn nữa, đó là một điều tốt.
yanlend

1

.NET Core là phiên bản hiện tại của .NET mà bạn nên sử dụng ngay bây giờ (nhiều tính năng hơn, sửa lỗi, v.v.)

Xamarin là một nền tảng cung cấp giải pháp cho các sự cố di động đa nền tảng được mã hóa bằng C #, do đó bạn không cần sử dụng Swift riêng cho iOS và tương tự với Android.


2
Tôi muốn nói .Net Core là những gì bạn nên sử dụng nếu bạn phải chạy trên Linux hoặc Linux và Windows. Nhưng tôi có thể làm trường hợp đó cho Mono, tôi nghĩ vậy. Nó chắc chắn không có nhiều tính năng. Theo định nghĩa, nó chỉ là các bit "lõi", nó không có các bit chỉ dành cho Windows, do đó, có ít tính năng hơn. Và tôi chỉ đoán nhưng có vẻ như không chắc chắn .Net Core có ít lỗi hơn. .Net Framework đã xuất hiện trên thế giới trong gần hai thập kỷ. Tôi sẽ tưởng tượng nó khá cứng trong trận chiến vào thời điểm này. Nhưng đó chỉ là dự đoán.
Jason Boyd

Nó chắc chắn có nhiều tính năng mới hơn, gần đây họ đã thêm các lớp mới sẽ không được thêm vào .NET 4.8. Họ cũng đã chuyển WPF và WinForms. Trên thực tế, có vẻ như .NET Core có thể thay thế .NET Framework. Nó dường như cũng hiệu quả hơn.
asdf

0

Xamarin được sử dụng cho các ứng dụng điện thoại (cả iOS / Android). .NET Core được sử dụng để thiết kế các ứng dụng Web có thể hoạt động trên cả Apache và IIS.

Đó là sự khác biệt trong hai câu.


Hmm .. ngoài việc bỏ lỡ tùy chọn thứ 3 (khung .net) thì nó không hoàn toàn đúng. Lõi .NET có thể được sử dụng trên hầu hết mọi thứ (Web, Desktop, Mobile, Cloud, Gaming, IoT, v.v.). .NET Framework là cửa sổ trung tâm và đã hoàn toàn đóng cửa. Mono là phiên bản mã nguồn mở (hướng đến cộng đồng) của .NET Framework được sử dụng bởi Xamarin, đưa công cụ di động đa nền tảng lên trên mono. Xamarin cuối cùng sẽ được thay thế, rất có thể là Blazor (hiện tại là pwa, nhưng lai sau đó là bản địa là một phần của bản đồ đường bộ).
shox

Đúng rồi. Xamarin dành cho các ứng dụng di động. Tôi không nghĩ rằng nó sẽ được thay thế sớm. ASMX vẫn được sử dụng cho Dịch vụ web và được bao gồm trong Visual 2019.
user10868910

-1

cập nhật vào tháng 5 năm 2019

bạn nên sử dụng .Net Core 3.0 trở lên để nâng cấp lên phiên bản tiếp theo .Net 5, tất cả những gì bạn cần chỉ là một nền tảng hợp nhất .Net5

Sẽ chỉ có một .NET đi tiếp và bạn sẽ có thể sử dụng nó để nhắm mục tiêu> Windows, Linux, macOS, iOS, Android, tvOS, watchOS và WebAssugging và hơn thế nữa. https://devbloss.microsoft.com/dotnet/int sinhing-net-5 /


Câu trả lời này không có ý nghĩa.
Kiril1512
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.