2015-12-01 16 views
9

Tôi đang cố gắng tạo thư viện lớp sẽ chứa các đối tượng chung (chủ yếu là DTO) của WebAPI (sử dụng ASP.NET 5) và ứng dụng UWP tiêu thụ. Tuy nhiên, tôi chưa tìm ra cách tạo thư viện lớp sao cho nó có thể được tham chiếu từ cả hai dự án khác.Tham khảo thư viện lớp từ UWP và ASP.NET 5

Những gì tôi đã cố gắng cho đến nay:
Trước tiên, tôi đã thử một Class Library (trọn gói), có thể được tìm thấy dưới Web. Đây là loại thư viện có thể được tham chiếu từ các dự án ASP.NET mà không vấn đề, nhưng khi cố gắng tham khảo nó từ dự án UWP, tôi nhận được thông báo sau:

A reference to 'ClassLibrary1' could not be added. 

Tiếp theo, tôi đã thử một Class Library (Windows Universal), có thể được tìm thấy dưới Windows> Universal. Điều này có thể dễ dàng được tham khảo từ các dự án UWP, nhưng khi cố gắng tham khảo nó từ ASP.NET, tôi nhận được:

The following projects are not supported as references : 

    - The project ClassLibrary2 has a target framework that is incompatible or has version higher than the current project and cannot be referenced. 

Vì vậy: Làm thế nào tôi có thể tạo ra một thư viện lớp có thể được sử dụng trong cả một ASP.NET 5 dự án dự án UWP?

Trả lời

7

Những gì bạn cần là Thư viện lớp di động (trong Windows).

PCL

Vì bạn đang nhắm mục tiêu chỉ ASP.NET 5 và Windows 10, bạn có thể giới hạn nền tảng để chỉ hai, nhưng không có "lỗi" trong việc hỗ trợ nền tảng hơn (nó có thể giới hạn bao nhiêu mặc dù API được chia sẻ có sẵn).

PCL 2

+0

Cảm ơn, công trình này tuyệt vời miễn là ASP.NET 5 chỉ nhắm mục tiêu 'dnxcore50' (trong đó, về lâu dài, là mục tiêu của tôi). Tuy nhiên, khi nhắm mục tiêu 'dnx451', tôi nhận được các lỗi như' Loại 'IEnumerable ' tồn tại trong cả hai 'mscorlib, Phiên bản = 4.0.0.0, Văn hóa = trung lập, PublicKeyToken = b77a5c561934e089' và 'System.Runtime, Phiên bản = 4.0 .20.0, Văn hóa = trung lập, PublicKeyToken = b03f5f7f11d50a3a '\t '- bất cứ điều gì tôi có thể làm về điều đó? –

+1

Rõ ràng là [một vấn đề đã biết] (https://github.com/dotnet/coreclr/issues/1228) với nhiều phiên bản của một số loại mà họ đang làm việc. Bạn có thể cố gắng tìm kiếm các tham chiếu trong project.json khi chúng thực hiện trong vấn đề này. – Bart

3

Các .Net Standard class library nên được coi như là một người kế nhiệm vào thư viện lớp cầm tay. Cả hai đều nhằm mục đích tạo điều kiện cho mã chia sẻ (trong trường hợp này là các đối tượng mô hình/DTO) giữa các nền tảng Net khác nhau.

Trong Visual Studio 2017, bây giờ bạn có thể chọn mẫu thư viện lớp chuẩn .Net. Thư viện lớp này có thể đặt cược để nhắm mục tiêu các phiên bản khác nhau của Chuẩn .Net. Phiên bản .Net Standard mà bạn nên nhắm mục tiêu sẽ phụ thuộc vào nền tảng .Net bạn muốn chia sẻ mã giữa.

Đối với câu hỏi cụ thể này, chúng tôi muốn hỗ trợ ứng dụng Nền tảng Windows phổ biến (UWP) và ứng dụng Asp.Net Core. Vì vậy, chúng ta nên tham khảo điều này compatibility table để xác định phiên bản của tiêu chuẩn .Net sẽ hỗ trợ cả hai nền tảng này. Trong trường hợp này, nó sẽ là .Net Standard 1.4. Một khi bạn đã thiết lập thư viện lớp để nhắm mục tiêu tiêu chuẩn .Net 1.4, bạn có thể thêm tham chiếu đến thư viện lớp từ các dự án lõi UWP và Asp.Net của bạn.

Để hiểu rõ hơn về những gì các tiêu chuẩn Net là gì và làm thế nào nó tạo điều kiện chia sẻ mã, tôi khuyên bạn nên xem xét như sau:

  1. Introducing .NET Standard
  2. Video Series on .NET Standard (điều này đặc biệt tốt)
  3. .Net Standard FAQ
Các vấn đề liên quan