2015-08-04 29 views
14

Gần đây tôi đã viết các nền tảng được hỗ trợ cho PCL của tôi, một trong số đó là các PCL khác. Tôi đã nhầm lẫn nếu thư viện của tôi (mà mục tiêu .NET Framework 4.5 và Windows/Phone 8.1) có thể được sử dụng trong các dự án .NET Core.Sự khác nhau giữa .NET Core và PCL là gì?

Như tôi đã hiểu, PCL cho phép bạn chia sẻ mã trên nhiều nền tảng mà không cần biên dịch lại, trong khi .NET Core thực hiện điều đó. Điểm khác biệt duy nhất là .NET Core nhắm mục tiêu một số ít hơn vài nền tảng khác, tức là OS X và Linux và là nguồn mở. Vì vậy, về cơ bản, tôi không thấy làm thế nào NET Core là bất kỳ khác với Microsoft đổi tên PCL và nói rằng "PAY ATTENTION chúng tôi đang đi mã nguồn mở và nhắm mục tiêu nền tảng không phải Windows!"

Vậy dòng dưới cùng là PCL tương thích với .NET Core và ngược lại? Sự khác nhau giữa chúng là gì?

Trả lời

14

Có một loạt bài viết đẹp về nó mà giải quyết câu hỏi của tôi xung quanh nó ...

https://oren.codes/2015/06/16/demystifying-pcls-net-core-dnx-and-uwp-redux/ https://oren.codes/2015/07/29/targeting-net-core/

Net Core có tất cả các thư viện của mình (ví dụ như System.IO) trong các gói NuGet riêng biệt (mỗi cái có sẵn cho SDK, DNX, UWP và .Net 4.6). Thư viện của bên thứ ba nhắm mục tiêu dnxcore50 (DNX) hoặc uap10.0 (UWP) nếu chúng truy cập nền tảng một cách tự nhiên hoặc dựa vào các tính năng của chúng. Nếu họ không truy cập nền tảng nhưng chỉ dựa vào các gói khác, họ nên nhắm mục tiêu dotnet.

dotnet có nghĩa là: Tôi tương thích với bất kỳ nền tảng nào đáp ứng các phụ thuộc của tôi (thư viện XYZ "dotnet" sử dụng System.Reflection dnxcore5+net45 không thể sử dụng bởi ứng dụng UWP uap10.0). Điều này có hiệu quả kết thúc cơn ác mộng tổ hợp của các nền tảng. Tổ hợp mục tiêu trước đó dnxcore5+net45 đã tạo một giao lộ giữa các thư viện nền tảng và mỗi lần bổ sung sẽ làm cho tình hình trở nên tồi tệ hơn. dotnet ở phía bên kia không hạn chế thư viện trên một mục tiêu mà thay vào đó chuyển tiếp quyết định hạn chế này cho các phụ thuộc của nó (nơi đột nhiên các hạn chế mới như nền tảng unicorn nổi tiếng có thể hiển thị).

Vì vậy, với tư cách là tác giả thư viện, bạn có thể nhắm mục tiêu dotnet nếu bạn chỉ cần các thư viện khác.

Trả lời câu hỏi của bạn:

  • PCL của bạn là tương thích với môi trường phong cách Net cốt lõi như DNX và UWP nếu bạn thêm các mục tiêu dotnet, dnxcore50 hoặc uap10.0 tùy thuộc vào nhu cầu của thư viện của bạn (xem bài viết của Owen cho cùng khả năng tương thích cơ bản với hồ sơ hợp đồng 259).
  • .Net Core là nhiều hơn một bộ thư viện PCLed. Nó là một CLR mới, một khung công tác có tổ chức mới (được đóng gói trong các phần nhỏ) và cơ sở hạ tầng cho các SDK .Net mới (DNX, UWP và bất kỳ thứ gì đến tiếp theo). Thuật ngữ ".Net Core" nhắm mục tiêu cả hai, thư viện lớp cơ sở "CoreFx" và CLR "CoreCLR". Nhưng các nền tảng thực sự là trong thực tế DNX (bởi nhóm ASP.Net) và UWP (bởi nhóm Windows).

Tất cả câu trả lời đó là hiểu biết hiện tại của tôi về tình huống thư viện .Net Core. Đó là công việc đang được tiến hành, và như đã đề cập trong các bài đăng, chưa được công bố tài liệu.

LƯU Ý tháng 12 năm 2016: Hãy nhận biết, dotnet như người tiền nhiệm để netstandard1.x đã thay đổi trong khái niệm của nó bắt đầu với netstandard2.x (NET Lõi 2,0; ~ tháng 6 năm 2017). Bắt đầu với netstandard2.0 sẽ có một hợp đồng chung (netstandard.dll) mà tất cả các nền tảng (.NET Core, .NET Framework, Xamarin, Mono, Unity3D) thực hiện. Hợp đồng này sẽ được mở rộng theo thời gian và nền tảng phải hoặc là thả hỗ trợ cho tiêu chuẩn mới nhất, ném NotImplementedException hoặc triển khai nó.

0

Sự hiểu biết của tôi là cả hai đều có khái niệm khác nhau.

  • .NET Được xây dựng dựa trên .NET Đầy đủ, .NET Core, Windows Phone, v.v ... như loại 'lớp cầu nối'.
  • Nó thực sự không có triển khai cụ thể, coi nó là một 'Gói' của các hội đồng của 'Giao diện' (hợp đồng).
  • Phạm vi của .NET Portable 'Package' là động, phụ thuộc vào nền tảng 'Mục tiêu' bạn sẽ 'bắc cầu'. Đó là giao điểm của các nền tảng mà bạn nhắm mục tiêu, nền tảng càng nhỏ thì gói nhỏ hơn.
  • Trong thời gian chạy, lớp di động này được nối/thích ứng với việc thực hiện thực tế của .NET đầy đủ, .net lõi hoặc ...
Các vấn đề liên quan