2012-12-03 22 views
10

Tôi đang xây dựng một gói NuGet tham chiếu đến hội đồng Microsoft CommonServiceLocator.Làm cách nào để chỉ định phụ thuộc có điều kiện dựa trên khung mục tiêu trong NuGet?

Có hai phiên bản của Microsoft CommonServiceLocator ngoài kia:

Dự án của tôi là Thư viện lớp di động nhưng vì đôi khi được sử dụng với Thư viện doanh nghiệp, tôi cần sắp xếp "có điều kiện" tham chiếu phiên bản di động để không xung đột.

  • Nếu khung mục tiêu đầy. NET 4.0/4.5, sử dụng gói CommonServiceLocator ban đầu để mọi người cũng có thể sử dụng các bit Thư viện doanh nghiệp (cũng tham chiếu gói CommonServiceLocator).
  • Nếu khung mục tiêu là di động (hoặc bất kỳ thứ gì khác), hãy sử dụng gói Portable.CommonServiceLocator.

I see the new "group" feature in the NuGet docs showing how to specify dependencies in your .nuspec file và tôi nghĩ điều đó sẽ làm những gì tôi muốn, nhưng tôi không chắc chắn cách kiểm tra.

Dưới đây là những gì tôi nghĩ tôi cần phải làm và tôi hy vọng ai đó có thể xác nhận cách tiếp cận của tôi hoặc chỉ cho tôi đi đúng hướng:

<dependencies> 
    <group> 
    <!-- Always include regardless of target framework --> 
    <dependency id="Autofac" /> 
    </group> 
    <group targetFramework="net40"> 
    <!-- Also include the full CSL if it's full framework --> 
    <dependency id="CommonServiceLocator" /> 
    </group> 
    <group targetFramework="portable-win+sl50+wp8"> 
    <!-- Otherwise include the Portable CSL --> 
    <dependency id="Portable.CommonServiceLocator" /> 
    </group> 
</dependencies> 

Cụ thể ...

  • Cú pháp của tôi là targetFramework phải không? Tôi không thể tìm thấy bất kỳ ví dụ nào, vì vậy tôi không biết liệu cơ chế phân tách + có đúng hay không hoặc nó nên được phân cách bằng dấu phẩy.
  • Nhóm mặc định có hoạt động không? Nhóm đó với khung mục tiêu không xác định - sẽ luôn luôn được bao gồm hoặc tôi có cần sao chép/dán nó vào mọi nhóm không?

Trả lời

4

Vâng, điều đó khá chính xác. Bạn có thể tìm thấy chi tiết về tên khung di động tại đây http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Framework_Names

Một điều nữa tôi thấy, vì win + sl50 + wp8 theo mặc định bao gồm net45 bạn có thể muốn bao gồm nó để nhóm phụ thuộc này được cài đặt.

+0

Nếu nó đầy đủ net45, tôi muốn nó sử dụng CommonServiceLocator, không phải là di động, vì vậy tôi sẽ sử dụng này? targetFramework = "net40 + net45" –

+0

không, không cần thiết và nó sẽ hoạt động tốt và sử dụng khi cài đặt trên một dự án nhắm mục tiêu net4.5 vì nó sẽ xếp hạng đối sánh chính xác cao hơn thư viện di động. và chỉ định net40 sẽ hoạt động như "Khi NuGet cài đặt một gói có nhiều phiên bản lắp ráp, nó cố gắng khớp tên khung của assembly với khung đích của dự án.Nếu không tìm thấy kết quả phù hợp, NuGet sẽ sao chép bản lắp ráp dành cho phiên bản cao nhất nhỏ hơn hoặc bằng khung mục tiêu của dự án " – Deepak

+0

Sau đó, có vẻ như tôi thực sự muốn loại bỏ tham chiếu net45 và phần còn lại rơi vào vị trí. –

Các vấn đề liên quan