Sự khác biệt giữa các loại dự án .NET Core và .NET Standard Class Library là gì?


814

Trong Visual Studio, có ít nhất 3 loại thư viện lớp khác nhau mà bạn có thể tạo:

  • Thư viện lớp (.NET Framework)
  • Thư viện lớp (Tiêu chuẩn .NET)
  • Thư viện lớp (.NET Core)

Mặc dù đầu tiên là những gì chúng ta đã sử dụng trong nhiều năm, một điểm khó hiểu chính mà tôi gặp phải là khi sử dụng các loại thư viện lớp .NET Standard và .NET Core. Gần đây tôi đã bị cắn bởi điều này khi cố gắng đa mục tiêu các phiên bản khung khác nhautạo một dự án thử nghiệm đơn vị .

Vậy, sự khác biệt giữa Thư viện lớp (.NET Standard)Thư viện lớp (.NET Core) là gì , tại sao cả hai tồn tại và khi nào chúng ta nên sử dụng cái này hơn cái kia?


10
Bạn đã bỏ lỡ một: Thư viện lớp (Portable). Core == framework, .NET Standard == xách tay.
Hans Passant

4
Cũng có một từ Xamarin, nhưng những người khác không thêm bất kỳ giá trị nào cho câu hỏi :)
Gigi

7
Vâng, họ làm. Ý tưởng cốt lõi là họ đã từ bỏ phương pháp di động, nó đã chịu đựng quá nhiều từ n! vấn đề với cách quá nhiều hồ sơ. Vì vậy, bây giờ bạn đã có 7 tiêu chuẩn để lựa chọn. Hầu hết không thực sự di động ngay bây giờ :) .NETCore không được thực hiện bằng một cú sút xa, có lẽ phải mất thêm hai năm nữa cho clip họ sẽ thực hiện.
Hans Passant

12
OP cho biết "ít nhất 3 loại khác nhau". Bài viết đã chính xác.
Dan Friedman

1
Tôi đã bối rối khi đặt tên Core không phải là một tập hợp con cốt lõi của cả dạng tấm tiêu chuẩn và khung. Ngoài ra, chúng tôi thường xuyên thấy ASP được liên kết với .Net Core. Điều này cũng rất khó hiểu ...
Alexis Pautrot

Câu trả lời:


611

Khi nào chúng ta nên sử dụng cái này hơn cái kia?

Quyết định này là sự đánh đổi giữa khả năng tương thích và truy cập API.

Sử dụng thư viện .NET Standard khi bạn muốn tăng số lượng ứng dụng sẽ tương thích với thư viện của bạn và bạn sẽ ổn với việc giảm diện tích bề mặt API .NET mà thư viện của bạn có thể truy cập.

Sử dụng thư viện .NET Core khi bạn muốn tăng diện tích bề mặt API .NET mà thư viện của bạn có thể truy cập và bạn vẫn ổn khi chỉ cho phép các ứng dụng .NET Core tương thích với thư viện của bạn.

Ví dụ: thư viện nhắm mục tiêu .NET Standard 1.3 sẽ tương thích với các ứng dụng nhắm mục tiêu .NET Framework 4.6, .NET Core 1.0, Universal Windows Platform 10.0 và bất kỳ nền tảng nào khác hỗ trợ .NET Standard 1.3. Thư viện sẽ không có quyền truy cập vào một số phần của .NET API. Chẳng hạn, Microsoft.NETCore.CoreCLRgói tương thích với .NET Core nhưng không tương thích với .NET Standard.

Sự khác biệt giữa Thư viện lớp (.NET Standard) và Thư viện lớp (.NET Core) là gì?

Phần khung dựa trên Gói mô tả sự khác biệt.

Khả năng tương thích: Các thư viện nhắm mục tiêu .NET Standard sẽ chạy trên mọi thời gian chạy tuân thủ .NET Standard, như .NET Core, .NET Framework, Mono / Xamarin. Mặt khác, các thư viện nhắm mục tiêu .NET Core chỉ có thể chạy trên thời gian chạy .NET Core.

API Surface Area: Các thư viện .NET Standard đi kèm với mọi thứ trong NETStandard.Librarykhi các thư viện .NET Core đi kèm với mọi thứ trong đó Microsoft.NETCore.App. Sau này bao gồm khoảng 20 thư viện bổ sung, một số trong đó chúng tôi có thể thêm thủ công vào thư viện .NET Standard của chúng tôi (chẳng hạn như System.Threading.Thread) và một số thư viện không tương thích với .NET Standard (chẳng hạn như Microsoft.NETCore.CoreCLR).

Ngoài ra, các thư viện .NET Core chỉ định thời gian chạy và đi kèm với một mô hình ứng dụng. Điều đó quan trọng, ví dụ, để làm cho các thư viện lớp kiểm tra đơn vị có thể chạy được.

Tại sao cả hai tồn tại?

Bỏ qua các thư viện trong giây lát, lý do mà .NET Standard tồn tại là vì tính di động; nó định nghĩa một bộ API mà các nền tảng .NET đồng ý triển khai. Bất kỳ nền tảng nào triển khai .NET Standard đều tương thích với các thư viện nhắm mục tiêu .NET Standard đó. Một trong những nền tảng tương thích đó là .NET Core.

Quay trở lại thư viện, các mẫu thư viện .NET Standard tồn tại để chạy trên nhiều thời gian chạy (với chi phí diện tích bề mặt API). Ngược lại, các mẫu thư viện .NET Core tồn tại để truy cập nhiều diện tích bề mặt API hơn (với chi phí tương thích) và để chỉ định một nền tảng để xây dựng một tệp thực thi.

Dưới đây là một ma trận tương tác cho thấy .NET Standard nào hỗ trợ (các) triển khai .NET nào và diện tích bề mặt API có sẵn là bao nhiêu.


2
Câu trả lời rất hay. Một câu hỏi bổ sung (liên quan đến câu hỏi này : tại sao một mô hình ứng dụng cần thiết để chạy thử nghiệm đơn vị? Điều này chưa từng xảy ra trong quá khứ, khi chúng tôi sử dụng các thư viện lớp không thể chạy để tổ chức các bộ sưu tập các bài kiểm tra đơn vị.
Gigi

3
Tôi đã cập nhật câu trả lời của mình cho câu hỏi được liên kết. TL; DR; Trước đây, các thư viện lớp đã nhắm mục tiêu khung đầy đủ, bao gồm một mô hình ứng dụng.
Shaun Luttin

Bạn đã quên bao gồm Thư viện lớp (.NET Framework), nó có tương thích với .NET Standard và .NET Core không?
Tomas

8
Sơ đồ này thực sự đã giúp tôi có được nó.
jpaugh

1
@BerBar Câu hỏi ban đầu là về sự khác biệt giữa .NET Standard và .NET Core. Đó là lý do tại sao tôi bỏ qua các chi tiết đa nền tảng, bởi vì đa nền tảng không phải là sự khác biệt giữa Core và Standard. Tôi đã cố tình giữ câu trả lời của mình trong phạm vi câu hỏi ban đầu.
Shaun Luttin

396

Một NET Lõi Class Library được xây dựng dựa trên các tiêu chuẩn NET . Nếu bạn muốn triển khai một thư viện có thể mang theo .NET Framework ,. .NET CoreXamarin , chọn Thư viện chuẩn .NET

.NET Core cuối cùng sẽ triển khai .NET Standard 2 (cũng như Xamarin.NET Framework )

Do đó, .NET Core , Xamarin.NET Framework có thể được xác định là hương vị của .NET Standard

Để chứng minh trong tương lai các ứng dụng của bạn để chia sẻ và tái sử dụng mã, bạn muốn triển khai các thư viện .NET Standard.

Microsoft cũng khuyên bạn nên sử dụng .NET Standard thay vì Thư viện lớp di động .

Để trích dẫn MSDN như một nguồn có thẩm quyền, .NET Standard được dự định là Một Thư viện để cai trị tất cả . Vì hình ảnh đáng giá ngàn lời nói, những điều sau đây sẽ làm cho mọi thứ rất rõ ràng:

1. Kịch bản ứng dụng hiện tại của bạn (bị phân mảnh)

Giống như hầu hết chúng ta, có lẽ bạn đang ở trong tình huống dưới đây: (.NET Framework, Xamarin và giờ là các ứng dụng có hương vị .NET Core)

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

2. Thư viện chuẩn .NET sẽ kích hoạt những gì cho bạn (khả năng tương thích giữa các khung)

Việc triển khai Thư viện chuẩn .NET cho phép chia sẻ mã trên tất cả các hương vị khác nhau này:

Một thư viện để cai trị tất cả

Dành cho người thiếu kiên nhẫn:

  1. .NET Standard giải quyết vấn đề chia sẻ mã cho các nhà phát triển .NET trên tất cả các nền tảng bằng cách mang tất cả các API mà bạn mong đợi và yêu thích trên các môi trường mà bạn cần: ứng dụng máy tính để bàn, ứng dụng & trò chơi di động và dịch vụ đám mây:
  2. .NET Standard là một bộ APItất cả các nền tảng .NET phải triển khai . Điều này hợp nhất các nền tảng .NETngăn ngừa sự phân mảnh trong tương lai .
  3. .NET Standard 2.0 sẽ được .NET Framework triển khai . Lõi NETXamarin . Đối với .NET Core , điều này sẽ thêm nhiều API hiện có đã được yêu cầu.
  4. .NET Standard 2.0 bao gồm một shim tương thích cho các nhị phân .NET Framework , tăng đáng kể bộ thư viện mà bạn có thể tham khảo từ các thư viện .NET Standard của mình.
  5. .NET Standard sẽ thay thế Thư viện lớp di động (PCL) làm câu chuyện công cụ để xây dựng thư viện .NET đa nền tảng.

Để có bảng giúp hiểu phiên bản .NET Standard cao nhất mà bạn có thể nhắm mục tiêu, dựa trên nền tảng .NET nào bạn định chạy, hãy truy cập vào đây .

Nguồn: MSDN: Giới thiệu .NET Standard


2
ASP.NET Core có một chút thất lạc trong đồ họa đó, vì nó có thể được sử dụng với .NET Framework đầy đủ, không chỉ .NET Core, vì nó thực sự nhắm vào .NET Standard.
Neme

2
Nhưng bạn có thể tạo một ứng dụng ASP.NET Core với .NET Framework đầy đủ - ASP.NET Core thực sự thuộc cùng một lớp với .NET Standard. Nó không bị hạn chế chỉ .NET Core.
Neme

1
@Neme Trước tiên, có .Net Core có thể bao gồm các thư viện .Net Framework nhưng mất khả năng sử dụng lại đa nền tảng (chỉ dành cho Windows - không phải * nix hoặc OSX hoặc tái sử dụng trong Xamarin). Một tình huống được đưa ra cho rằng nhiều người đã và muốn sử dụng lại các thư viện hiện có được viết trong full.Net Framework mà không quan tâm đến lợi ích đa nền tảng (cấp độ hệ điều hành và mô hình ứng dụng) ... Nếu bạn vẫn cảm thấy tôi sai, có lẽ bạn có thể tranh luận với Microsoft, người đã tạo ra những hình ảnh đó ... :-)
user919426

3
Tôi không nói về việc kết hợp .NET Core & .NET Framework. Quan điểm của tôi là ASP.NET Core hoàn toàn không phụ thuộc vào .NET Core, mặc dù có tên. Nó được viết dưới dạng thư viện nhắm mục tiêu .NET Standard, do đó bạn có thể sử dụng nó ở mọi nơi bạn có thể sử dụng .NET Standard. Vâng, họ đã phạm sai lầm trong hình ảnh đó.
Neme

2
@OgrishMan Bạn không thể tạo tệp thực thi trong .Net Standard . Nó chỉ có thể là một Thư viện lớp, có thể được tham chiếu bởi mã thực thi khác. Nó không có thời gian chạy .
dùng919426

91

Vì vậy, câu trả lời ngắn sẽ là:

IAnimal == .NetStandard (General)
ICat == .NetCore (Less General)
IDog == .NetFramework (Specific / oldest and has the most features)

26
@ Joe.wang như tôi thấy thật tệ khi nó làm xáo trộn mối quan hệ giữa .NET Core và .NET Framework. Nếu .NET Core là con chim, thì .NET Framework không thể là đại bàng (có lẽ con mèo phù hợp hơn).
Lex Li

8
@LexLi nói đúng, điều này làm vẩn đục nước. .NET Framework không phải là một kiểu con của .NET Core.
Eric Eskildsen

6
điều này có thể trông hơi lạ mắt nhưng không hiệu quả
afr0

3
Nhận xét ban đầu của @Joe nghe có vẻ chính xác hơn. câu trả lời được chỉnh sửa bởi Cộng đồng khiến nó trở nên khó hiểu
Nandun

7
Chó có nhiều tính năng hơn mèo? Không :)
hrzafer 27/07/18

71

.NET.NET Core là hai triển khai khác nhau của thời gian chạy .NET. Cả Core và Framework (đặc biệt là Framework) đều có các cấu hình khác nhau bao gồm các lựa chọn lớn hơn hoặc nhỏ hơn (hoặc chỉ đơn giản là khác nhau) của nhiều API và hội đồng mà Microsoft đã tạo cho .NET, tùy thuộc vào vị trí chúng được cài đặt và trong cấu hình nào.

Ví dụ: có một số API khác nhau có sẵn trong các ứng dụng Universal Windows so với cấu hình Windows "bình thường". Ngay cả trên Windows, bạn có thể có hồ sơ "Khách hàng" so với hồ sơ "Đầy đủ". Ngoài ra, và có những triển khai khác (như Mono ) có bộ thư viện riêng.

.NET Standard là một đặc tả cho các bộ thư viện và tập hợp API phải có sẵn. Một ứng dụng được viết cho .NET Standard 1.0 sẽ có thể biên dịch và chạy với bất kỳ phiên bản nào của Framework, Core, Mono, v.v., quảng cáo hỗ trợ cho bộ sưu tập thư viện .NET Standard 1.0. Tương tự như vậy đối với .NET Standard 1.1, 1.5, 1.6, 2.0, v.v ... Miễn là thời gian chạy cung cấp hỗ trợ cho phiên bản Tiêu chuẩn được nhắm mục tiêu bởi chương trình của bạn, chương trình của bạn sẽ chạy ở đó.

Một dự án nhắm vào một phiên bản của Tiêu chuẩn sẽ không thể sử dụng các tính năng không có trong bản sửa đổi của tiêu chuẩn đó. Điều này không có nghĩa là bạn không thể phụ thuộc vào các hội đồng khác hoặc API được xuất bản bởi các nhà cung cấp khác (ví dụ: các mục trên NuGet). Nhưng điều đó có nghĩa là bất kỳ sự phụ thuộc nào bạn thực hiện cũng phải bao gồm hỗ trợ cho phiên bản .NET Standard của bạn. .NET Standard đang phát triển nhanh chóng, nhưng nó vẫn đủ mới và quan tâm đủ về một số cấu hình thời gian chạy nhỏ hơn, rằng giới hạn này có thể cảm thấy ngột ngạt. (Lưu ý một năm rưỡi sau: điều này đang bắt đầu thay đổi và các phiên bản .NET Standard gần đây đẹp hơn và đầy đủ tính năng hơn).

Mặt khác, một ứng dụng nhắm vào Standard sẽ có thể được sử dụng trong các tình huống triển khai hơn, vì về lý thuyết, nó có thể chạy với Core, Framework, Mono, v.v. Đối với một dự án thư viện lớp đang tìm kiếm phân phối rộng, đó là một lời hứa hấp dẫn . Đối với một dự án thư viện lớp được sử dụng chủ yếu cho các mục đích nội bộ, nó có thể không phải là mối quan tâm nhiều.

.NET Standard cũng có thể hữu ích trong các tình huống mà nhóm quản trị hệ thống muốn chuyển từ ASP.NET trên Windows sang ASP.NET cho .NET Core trên Linux vì lý do triết học hoặc chi phí, nhưng nhóm Phát triển muốn tiếp tục làm việc. NET Framework trong Visual Studio trên Windows.


1
Mặc dù tổng quan tốt về .NET Core và .NET Standard là gì, câu trả lời này không trả lời được câu hỏi về các thư viện lớp nhắm mục tiêu vào từng thư viện này.
Gigi

6
Nếu đó là mục tiêu của bạn, câu hỏi cần được đóng lại là "không rõ bạn đang hỏi gì", vì sẽ luôn có quá nhiều chi tiết tình huống phát vào môi trường của một người nhất định để chúng tôi chỉ cho bạn biết phải làm gì hoặc là "Quá rộng" nếu bạn hỏi về trường hợp chung. Tất cả những gì chúng tôi có thể làm ở đây là cung cấp cho bạn thông tin về các sản phẩm, vì vậy bạn có thể được thông báo để đưa ra quyết định của riêng mình.
Joel Coehoorn

Đó rõ ràng không phải là trường hợp, vì người khác đã trả lời chính xác câu hỏi. Câu hỏi của tôi là về các thư viện lớp. Câu trả lời của bạn là về các khung.
Gigi

29

.NET Framework và .NET Core đều là các framework.

.NET Standard là một tiêu chuẩn (nói cách khác, một đặc điểm kỹ thuật).

Bạn có thể tạo một dự án thực thi (như ứng dụng console hoặc ứng dụng ASP.NET) với .NET Framework và .NET Core, nhưng không phải với .NET Standard.

Với .NET Standard, bạn chỉ có thể tạo một dự án thư viện lớp không thể được thực thi độc lập và nên được tham chiếu bởi một dự án thực thi .NET Core hoặc .NET Framework khác.


20

Hy vọng điều này sẽ giúp hiểu được mối quan hệ giữa bề mặt API tiêu chuẩn .NET và các nền tảng .NET khác . Mỗi giao diện đại diện cho khung mục tiêu và các phương thức đại diện cho các nhóm API có sẵn trên khung mục tiêu đó.

namespace Analogy
{
  // .NET Standard

interface INetStandard10
{
    void Primitives();
    void Reflection();
    void Tasks();
    void Xml();
    void Collections();
    void Linq();
}

interface INetStandard11 : INetStandard10
{
    void ConcurrentCollections();
    void LinqParallel();
    void Compression();
    void HttpClient();
}

interface INetStandard12 : INetStandard11
{
    void ThreadingTimer();
}

interface INetStandard13 : INetStandard12
{
    //.NET Standard 1.3 specific APIs
}

// And so on ...


// .NET Framework 

interface INetFramework45 : INetStandard11
{
    void FileSystem();
    void Console();
    void ThreadPool();
    void Crypto();
    void WebSockets();
    void Process();
    void Drawing();
    void SystemWeb();
    void WPF();
    void WindowsForms();
    void WCF();
}

interface INetFramework451 : INetFramework45, INetStandard12
{
    // .NET Framework 4.5.1 specific APIs
}

interface INetFramework452 : INetFramework451, INetStandard12
{
    // .NET Framework 4.5.2 specific APIs
}

interface INetFramework46 : INetFramework452, INetStandard13
{
    // .NET Framework 4.6 specific APIs
}

interface INetFramework461 : INetFramework46, INetStandard14
{
    // .NET Framework 4.6.1 specific APIs
}

interface INetFramework462 : INetFramework461, INetStandard15
{
    // .NET Framework 4.6.2 specific APIs
}

// .NET Core
interface INetCoreApp10 : INetStandard15
{
    // TODO: .NET Core 1.0 specific APIs
}
// Windows Universal Platform
interface IWindowsUniversalPlatform : INetStandard13
{
    void GPS();
    void Xaml();
}

// Xamarin 
interface IXamarinIOS : INetStandard15
{
    void AppleAPIs();
}

interface IXamarinAndroid : INetStandard15
{
    void GoogleAPIs();
}    
// Future platform

interface ISomeFuturePlatform : INetStandard13
{
    // A future platform chooses to implement a specific .NET Standard version.
    // All libraries that target that version are instantly compatible with this new
    // platform
}
}

Nguồn


17

Một cách khác để giải thích sự khác biệt có thể là với các ví dụ trong thế giới thực, vì hầu hết mọi người trong chúng ta sẽ sử dụng các công cụ và khung hiện có (Xamarin, Unity, v.v.) để thực hiện công việc.

Vì vậy, với .NET Framework bạn có tất cả các công cụ .NET để làm việc nhưng bạn chỉ có thể nhắm mục tiêu các ứng dụng Windows (UWP, Winforms, ASP.NET, v.v.). Vì .NET Framework là nguồn đóng nên không có nhiều việc phải làm.

Với .NET Core, bạn có ít công cụ hơn nhưng bạn có thể nhắm mục tiêu Nền tảng máy tính để bàn chính (Windows, Linux, Mac). Điều này đặc biệt hữu ích trong các ứng dụng ASP.NET Core, vì giờ đây bạn có thể lưu trữ Asp.net trong Linux (giá lưu trữ rẻ hơn). Bây giờ, vì .NET Core đã được mở nguồn, về mặt kỹ thuật có thể phát triển các thư viện cho các nền tảng khác. Nhưng vì không có khung hỗ trợ nào, tôi không nghĩ đó là một ý tưởng hay.

Với .NET Standard, bạn thậm chí còn có ít công cụ hơn nhưng bạn có thể nhắm mục tiêu tất cả / hầu hết các nền tảng. Bạn có thể nhắm mục tiêu Di động nhờ Xamarin và thậm chí bạn có thể nhắm mục tiêu Bảng điều khiển trò chơi nhờ vào Mono / Unity. Cập nhật: Cũng có thể nhắm mục tiêu khách hàng web với nền tảng UNO và Blazor (mặc dù cả hai đều là thử nghiệm ngay bây giờ).

Trong một ứng dụng thế giới thực, bạn có thể cần phải sử dụng tất cả chúng. Ví dụ, tôi đã phát triển một ứng dụng điểm bán hàng có kiến ​​trúc như sau:

Được chia sẻ cả Máy chủ và Máy khách:

  • Một thư viện .NET Standard xử lý các Mô hình ứng dụng của tôi.
  • Một thư viện .NET Standard xử lý việc xác thực dữ liệu được gửi bởi các máy khách.

Vì nó là thư viện .NET Standard, nên nó có thể được sử dụng trong bất kỳ dự án nào khác (máy khách và máy chủ).

Ngoài ra một lợi thế tốt của việc xác thực trên thư viện chuẩn .NET vì tôi có thể chắc chắn rằng việc xác thực tương tự được áp dụng trên máy chủ và máy khách. Máy chủ là bắt buộc, trong khi máy khách là tùy chọn và hữu ích để giảm lưu lượng.

Phía máy chủ (API Web):

  • Một thư viện .NET Standard (cũng có thể là Core) xử lý tất cả các kết nối cơ sở dữ liệu.

  • Dự án .NET Core xử lý API còn lại và sử dụng thư viện cơ sở dữ liệu.

Vì điều này được phát triển trong .NET Core, tôi có thể lưu trữ ứng dụng trên máy chủ Linux.

Phía máy khách (MVVM với WPF + Xamarin.Forms Android / IOS):

  • Thư viện .NET Standard xử lý kết nối API máy khách.

  • Một thư viện .NET Standard xử lý Logic ViewModels. Được sử dụng trong tất cả các quan điểm.

  • Một ứng dụng .NET Framework WPF xử lý các khung nhìn WPF cho một ứng dụng Windows. Cập nhật: Hiện tại các ứng dụng WPF có thể là lõi .NET, mặc dù hiện tại chúng chỉ hoạt động trên windows. AvaloniaUI là một lựa chọn tốt để tạo các ứng dụng GUI cho máy tính để bàn cho các nền tảng máy tính để bàn khác.

  • Một thư viện .NET Standard xử lý các khung nhìn Xamarin Forms.

  • Một dự án Xamarin Android và Xamarin IOS.

Vì vậy, bạn có thể thấy rằng có một lợi thế lớn ở phía máy khách của ứng dụng, vì tôi có thể sử dụng lại cả thư viện .NET Standard (API khách và ViewModels) và chỉ tạo các chế độ xem không có logic cho các ứng dụng WPF, Xamarin và IOS.


2
Tôi nghĩ rằng đây là một câu trả lời tốt hơn vì nó kết hợp với thế giới thực.
J Weezy

12

.NET Standard: Hãy nghĩ về nó như một thư viện tiêu chuẩn lớn. Khi sử dụng điều này như một phụ thuộc, bạn chỉ có thể tạo thư viện (.DLL), không thể thực thi. Một thư viện được tạo với tiêu chuẩn .NET như một phụ thuộc có thể được thêm vào Xamarin.Android, Xamarin.iOS, một dự án .NET / Windows X / Linux của .NET Core.

.NET Core: Hãy nghĩ về nó như là sự tiếp nối của khung .NET cũ, chỉ là nó là nguồn mở và một số thứ chưa được triển khai và những thứ khác không được dùng nữa. Nó mở rộng tiêu chuẩn .NET với các chức năng bổ sung, nhưng nó chỉ chạy trên máy tính để bàn . Khi thêm phần này dưới dạng phụ thuộc, bạn có thể tạo các ứng dụng chạy được trên Windows, Linux và OS X. (Mặc dù bây giờ chỉ có giao diện điều khiển, không có GUI). Vì vậy, .NET Core = .NET Standard + cụ thể cho máy tính để bàn.

Ngoài ra UWP sử dụng nó và ASP.NET Core mới cũng sử dụng nó như một phần phụ thuộc.


8

.NET Standard tồn tại chủ yếu để cải thiện việc chia sẻ mã và làm cho các API có sẵn trong mỗi triển khai .NET trở nên nhất quán hơn.

Trong khi tạo thư viện, chúng ta có thể có mục tiêu là .NET Standard 2.0 để thư viện được tạo sẽ tương thích với các phiên bản .NET Framework khác nhau bao gồm .NET Core, Mono , v.v.


2

Các câu trả lời ở trên có thể mô tả sự hiểu biết tốt nhất về sự khác biệt giữa lõi ròng, tiêu chuẩn ròng và khung hình mạng vì vậy tôi chỉ muốn chia sẻ kinh nghiệm của mình khi chọn điều này.

Trong dự án mà bạn cần kết hợp giữa .NET Framework, .NET Core và .NET Standard. Ví dụ: tại thời điểm chúng tôi xây dựng hệ thống với .NET Core 1.0, không có hỗ trợ cho dịch vụ lưu trữ Window Services với lõi .net.

Lý do tiếp theo là chúng tôi đã sử dụng Báo cáo hoạt động không hỗ trợ .NET Core. Vì vậy, chúng tôi muốn xây dựng một thư viện cơ sở hạ tầng có thể được sử dụng cho cả .NET Core (lõi asp.net) và Báo cáo và Dịch vụ Windows (.NET Framework) -> Đó là lý do tại sao chúng tôi chọn .NET Standard cho loại thư viện này. Chọn chuẩn .NET có nghĩa là bạn cần xem xét cẩn thận mọi lớp trong thư viện phải đơn giản và chéo .NET (lõi, khung, tiêu chuẩn).

Phần kết luận:

  • .NET Standard cho thư viện cơ sở hạ tầng và dùng chung. Lib này có thể được tham chiếu bởi .NET Framework và .NET Core.
  • .NET Framework cho các công nghệ không được hỗ trợ như Báo cáo hoạt động, Dịch vụ cửa sổ (hiện có .NET 3.0, nó hỗ trợ).
  • Tất nhiên .NET Core cho ASP.NET Core.

Microsoft vừa công bố .NET 5: https://devbloss.microsoft.com/dotnet/int sinhing-net-5 /


@Gigi Vui lòng đọc kỹ câu trả lời của tôi, tôi đã nói rằng đó là khi .NET Core ở phiên bản 1.0 và trường hợp này chúng tôi muốn thiết kế một giải pháp để kết hợp cả .NET core và .NET framework. ASP.NET Core hỗ trợ .NET Framework từ 2.0 ở trên. Câu trả lời của tôi là một câu chuyện khi bạn phải đối phó với nhiều phiên bản .NET. Vì vậy, tôi không thể hiểu tại sao bạn có một downvote khi bạn không hiểu chính xác tình huống.
toannm

Cảm ơn câu trả lời của bạn - Tôi đã đọc câu trả lời của bạn và tôi đã đọc phần mà bạn đã đề cập đến .NET Core 1.0. Tuy nhiên, tôi đã không coi đó là điều kiện tiên quyết để diễn giải kết luận của bạn, điều này sẽ khiến mọi người đọc sai với phiên bản hiện tại. Ngoài ra, có vẻ như bình luận của tôi đã bị cảnh sát Stack Overflow bắt cóc, đó là một sự xấu hổ mà tôi đã quen với trang web này.
Gigi

0

.NET Framework Windows Form, ứng dụng ASP.NET và WPF phải được phát triển bằng thư viện .NET Framework

Ứng dụng .NET Standard Xamarin, IOs và MAC OSx phải được sử dụng thư viện .NET Standard

.NET Core
Universal Windows Platform (UWP) và ứng dụng Linux phải được phát triển bằng thư viện .NET Core. API được triển khai trong C ++ và bạn có thể sử dụng các ngôn ngữ C ++, VB.NET, C #, F # và Javascript.NET


0

Thư viện lớp lõi .Net được xây dựng theo tiêu chuẩn .Net. Nếu bạn muốn triển khai thư viện di động tới .Net Framework, .Net Core và Xamarin, hãy chọn Thư viện chuẩn .Net


Câu trả lời của bạn không hoàn toàn liên quan đến câu hỏi. vui lòng sửa lại
Lập trình viên Avid
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.