Sự khác biệt giữa Dự án được chia sẻ và Thư viện lớp trong Visual Studio 2015 là gì?


240

Tôi đã xem xét các tính năng mới cho Visual Studio 2015 và Shared Project đã xuất hiện rất nhiều nhưng tôi không hiểu nó khác với việc sử dụng Thư viện lớp hay Thư viện lớp di động như thế nào. Bất cứ ai có thể giải thích?

Chỉnh sửa: Shared Project là một tính năng mới trong Visual Studio 2015 và khác với Thư viện lớp di động. Tôi hiểu Thư viện lớp di động là gì. Điều tôi đang cố gắng hiểu là Dự án được chia sẻ khác với Thư viện lớp như thế nào. Xem liên kết dưới đây.

http://www.c-sharpcorner.com/UploadFile/7ca517/spl-project-an-impressive-features-of-visual-studio-201/


Câu trả lời:


238

Sự khác biệt giữa một dự án được chia sẻ và một thư viện lớp là cái sau được biên dịch và đơn vị tái sử dụng là tập hợp.

Trong khi trước đây, đơn vị sử dụng lại là mã nguồn và mã được chia sẻ được tích hợp vào mỗi hội đồng tham chiếu dự án chia sẻ.

Điều này có thể hữu ích khi bạn muốn tạo các hội đồng riêng biệt nhắm mục tiêu các nền tảng cụ thể nhưng vẫn có mã cần được chia sẻ.

Xem thêm tại đây :

Tham chiếu dự án được chia sẻ hiển thị dưới nút Tham chiếu trong Solution Explorer, nhưng mã và tài sản trong dự án được chia sẻ được xử lý như thể chúng là các tệp được liên kết vào dự án chính.


Trong các phiên bản trước của Visual Studio 1 , bạn có thể chia sẻ mã nguồn giữa các dự án bằng cách Thêm -> Mục hiện có và sau đó chọn Liên kết. Nhưng đây là loại khó hiểu và mỗi tệp nguồn riêng biệt phải được chọn riêng. Với việc chuyển sang hỗ trợ nhiều nền tảng khác nhau (iOS, Android, v.v.), họ đã quyết định giúp chia sẻ nguồn giữa các dự án dễ dàng hơn bằng cách thêm khái niệm Dự án chia sẻ.


1 Câu hỏi này và câu trả lời của tôi (cho đến bây giờ) cho thấy rằng Dự án được chia sẻ là một tính năng mới trong Visual Studio 2015. Trên thực tế, họ đã xuất hiện lần đầu trong Visual Studio 2013 Update 2


1
Giả sử hai dự án tham chiếu cùng một dự án được chia sẻ. Nếu một trong số đó thêm một tham chiếu đến cái kia, bạn có nhận được lỗi khai báo kiểu trùng lặp không?
Asad Saeeduddin

3
@Asad - Tôi chưa kiểm tra, nhưng tôi không mong đợi. Bạn có thể có hai loại riêng biệt, có cùng tên và được khai báo bên trong cùng một không gian tên nhưng tồn tại trong các cụm khác nhau. Đó không phải là một lỗi, mỗi lần.
Damien_The_Unbeliever

Tôi đã có câu hỏi chính xác giống như OP năm 2017 nhưng vì chúng tôi có .net tiêu chuẩn 2.0 bây giờ. Các dự án không được chia sẻ bây giờ đã lỗi thời? Nếu bạn sẽ tạo một ứng dụng web hoặc ứng dụng uwp hoàn toàn mới ngay hôm nay?
JP Hellemons

1
@JPHellemons - .net tiêu chuẩn là tốt - nhưng nếu bạn cần vượt ra ngoài điều đó vì bất kỳ lý do gì (ví dụ: nếu chức năng chỉ có sẵn trên các nền tảng cụ thể ) thì Dự án chia sẻ vẫn có thể là một cách tiếp cận hợp lý.
Damien_The_Unbeliever

1
Chúng tôi nói với một dự án được chia sẻ, chúng tôi có thể chia sẻ các tệp Javascript. Làm thế nào để chúng ta sử dụng nó trong bundleConfig?
Leth

34

Tôi tìm thấy một số thông tin từ blog này .

  • Trong Thư viện lớp, khi mã được biên dịch, các cụm (dll) được tạo cho mỗi thư viện. Nhưng với Dự án được chia sẻ, nó sẽ không chứa bất kỳ thông tin tiêu đề nào nên khi bạn có tham chiếu Dự án chung, nó sẽ được biên dịch như một phần của ứng dụng mẹ. Sẽ không có dll riêng biệt được tạo ra.
  • Trong thư viện lớp, bạn chỉ được phép viết mã C # trong khi dự án được chia sẻ có thể có bất kỳ thứ gì như tệp mã C #, tệp XAML hoặc tệp JavaScript, v.v.

7
một thư viện lớp cũng có thể có .xaml (Điều khiển người dùng)
Mặc định

21

Sự khác biệt ngắn

1) PCL sẽ không có quyền truy cập đầy đủ vào .NET Framework, như SharedProject có.

2) #ifdef cho mã cụ thể của nền tảng - bạn không thể viết bằng PCL ( tùy chọn #ifdef không có sẵn cho bạn trong PCL vì nó được biên dịch riêng, dưới dạng DLL của chính nó, vì vậy tại thời điểm biên dịch (khi #ifdef được đánh giá) nó không biết nó sẽ là một phần của nền tảng nào. ) trong trường hợp như dự án được chia sẻ mà bạn có thể.

3) Mã cụ thể của nền tảng đạt được bằng cách sử dụng Inversion Of Control trong PCL, khi sử dụng các câu lệnh #ifdef, bạn có thể đạt được điều tương tự trong Dự án được chia sẻ.

Một bài viết tuyệt vời minh họa sự khác biệt giữa PCL và Dự án chia sẻ có thể được tìm thấy tại liên kết sau

http://hotkrossbits.com/2015/05/03/xamarin-forms-pcl-vs- Shared-project /


18

Giống như những người khác đã viết, trong ngắn hạn:

chia sẻ
sử dụng lại dự án ở cấp độ mã (tệp), cho phép cả cấu trúc thư mục và tài nguyên


tái sử dụng pcl ở cấp độ lắp ráp

Điều tôi hầu như không có trong các câu trả lời ở đây đối với tôi là thông tin về chức năng bị giảm có sẵn trong PCL: như một ví dụ bạn có các thao tác tệp hạn chế (Tôi đã thiếu rất nhiều tính hợp lý của File.IO trong dự án đa nền tảng Xamarin).

Chi tiết hơn về
dự án được chia sẻ :
+ Có thể sử dụng #if khi nhắm mục tiêu nhiều nền tảng (ví dụ: Xamarin iOS, Android, WinPhone)
+ Tất cả chức năng khung có sẵn cho từng dự án mục tiêu (mặc dù phải được biên dịch theo điều kiện)
o Tích hợp vào thời gian biên dịch
- Kích thước lớn hơn một chút của các hội đồng kết quả
- Cần Visual Studio 2013 Cập nhật 2 hoặc cao hơn

pcl :
+ tạo ra một hội đồng chia sẻ
+ có thể sử dụng với các phiên bản cũ hơn của Visual Studio (Bản cập nhật trước 2013)
o được liên kết động
- chức năng lmited (tập hợp con của tất cả các dự án mà nó đang được tham chiếu bởi)

Nếu bạn có sự lựa chọn, tôi khuyên bạn nên đi dự án chia sẻ, nó thường linh hoạt hơn và mạnh mẽ hơn. Nếu bạn biết trước các yêu cầu của mình và PCL có thể đáp ứng chúng, bạn cũng có thể đi theo lộ trình đó. PCL cũng thực thi phân tách rõ ràng hơn bằng cách không cho phép bạn viết mã dành riêng cho nền tảng (có thể không phải là một lựa chọn tốt để đưa vào một hội đồng chia sẻ ở vị trí đầu tiên).

Trọng tâm chính của cả hai là khi bạn nhắm mục tiêu nhiều nền tảng, thông thường bạn sẽ chỉ sử dụng một dự án thư viện / dll thông thường.


9

Từ cuốn sách VS 2015 thành công

Dự án được chia sẻ cho phép chia sẻ mã, tài sản và tài nguyên trên nhiều loại dự án. Cụ thể hơn, các loại dự án sau đây có thể tham chiếu và tiêu thụ các dự án được chia sẻ:

  • Bảng điều khiển, Windows Forms và Windows Presentation Foundation.
  • Ứng dụng Windows Store 8.1 và ứng dụng Windows Phone 8.1.
  • Ứng dụng Windows Phone 8.0 / 8.1 Silverlight.
  • Thư viện lớp di động.

Lưu ý: - Cả dự án chia sẻ và thư viện lớp di động (PCL) đều cho phép chia sẻ mã, tài nguyên XAML và tài sản, nhưng tất nhiên có một số khác biệt có thể được tóm tắt như sau.

  • Một dự án được chia sẻ không tạo ra một hội đồng có thể tái sử dụng, vì vậy nó chỉ có thể được tiêu thụ từ bên trong giải pháp.
  • Một dự án được chia sẻ có hỗ trợ mã dành riêng cho nền tảng, bởi vì nó hỗ trợ các biến môi trường như WINDOWS_PHONE_APP và WINDOWS_APP mà bạn có thể sử dụng để phát hiện mã nào đang chạy trên nền tảng nào.
  • Cuối cùng, các dự án được chia sẻ không thể có sự phụ thuộc vào thư viện của bên thứ ba.
  • Để so sánh, PCL tạo ra một thư viện có thể tái sử dụng và có thể có sự phụ thuộc vào các thư viện của bên thứ ba, nhưng nó không hỗ trợ các biến môi trường nền tảng

7

Thư viện lớp được chia sẻ mã biên dịch.

Dự án chia sẻ là mã nguồn chia sẻ.

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.