2011-10-14 22 views
65

Tôi đang tạo gói nuget đầu tiên của mình. Tôi đã thêm một phụ thuộc với phiên bản không phải là phiên bản mới nhất. Tuy nhiên, tôi không muốn cập nhật lên phiên bản mới nhất của sự phụ thuộc này. Có thể hướng dẫn sử dụng phiên bản cụ thể không?Cách chỉ định phiên bản phụ thuộc cụ thể trong nuspec?

<dependencies> 
    <dependency id="NHibernate" version="3.2.0.3001" /> 
</dependencies> 

Khi tôi cài đặt gói Tôi thấy điều này:

Attempting to resolve dependency 'NHibernate (≥ 3.2.0.3001)'. 

Điều này tạo ra sau khi tôi cài đặt gói.

<packages> 
    <package id="Iesi.Collections" version="3.2.0.4000" /> 
    <package id="NHibernate" version="3.2.0.4000" /> 
</packages> 

Tôi thực sự muốn nhìn thấy một cái gì đó như thế này: Cố gắng giải quyết phụ thuộc 'NHibernate (3.2.0.3001)'.

+3

Bạn có thể làm điều này như đã trả lời dưới đây. Nhưng hãy nhớ rằng bất kỳ ai sử dụng gói của bạn và cũng sử dụng NHibernate, (hoặc bất kỳ phụ thuộc nào khác mà bạn đã chỉ định phiên bản gói chính xác) thì không thể cập nhật điều này vì bất kỳ lý do nào trừ khi bạn cho phép chúng. Đây là trạng thái xấu. Một "phiên bản bị khóa" bit chúng tôi gần đây: Trong trường hợp của chúng tôi gói phiên bản bị khóa không NHIB nhưng một gói không liên quan. Khóa phiên bản có thể cần thiết nếu có những thay đổi đột phá chính hãng trong thư viện ngược dòng, nhưng trong trường hợp của chúng tôi mà chúng tôi đã không có; chỉ sử dụng quá mức cú pháp này. Vì vậy, nếu bạn sử dụng nó, sử dụng nó một cách thận trọng! – Anthony

Trả lời

96

Bạn sẽ có thể buộc một phiên bản chính xác với dấu ngoặc:

<dependency id="NHibernate" version="[3.2.0.3001]" /> 

Đầy đủ thông tin về các định dạng, bạn có thể sử dụng được trên trang web NuGet, ở đây:

http://docs.nuget.org/docs/reference/version-range-specification

+0

Tôi không biết làm thế nào tôi không tìm thấy trang đó! Cảm ơn. – devlife

+0

Bạn có thể làm điều này. Nhưng nhớ rằng bất cứ ai sử dụng gói của bạn và cũng sử dụng NHibernate, sau đó không thể cập nhật NHibernate vì bất kỳ lý do nào trừ khi bạn cho phép chúng. Đây không phải là một tình trạng tuyệt vời. – Anthony

+0

@Anthony Tôi nghĩ rằng nhận xét này là tốt hơn về câu hỏi mà câu trả lời của tôi; Tôi chỉ cho thấy làm thế nào để làm điều đó, không ủng hộ nó.Vấn đề bạn mô tả là không dễ dàng giải quyết mặc dù; nếu bạn có hai mã lệnh mà không làm việc cùng một phiên bản NH (vì lỗi, sự khác biệt về API, bất kỳ điều gì), thì bạn đã bị hỏng. Sửa chữa thực sự là phụ thuộc tư nhân (như Node có), nhưng tôi không thể nhìn thấy .NET bao giờ nhận được hỗ trợ "thích hợp" cho rằng: ( –

2

Theo http://nuget.codeplex.com/wikipage?title=Dependency%20Resolution và các nguồn khác, chỉ cần quy định cụ thể ràng buộc thấp như

<dependencies> 
    <dependency id="NHibernate" version="3.2.0.3001" /> 
</dependencies> 

sẽ dẫn đến mức điều chỉnh/vá cao nhất của phiên bản lớn/nhỏ thấp nhất phù hợp với phiên bản đó.

Trừ khi tôi hoàn toàn hiểu nhầm tài liệu, điều này sẽ khớp với phiên bản 3.2. * Cao nhất nhưng không phải 3.3. * Hoặc các phiên bản lớn hơn trừ khi không có phiên bản 3.2. *.

Nếu có lý do tại sao 3.2.0.3001 là phiên bản duy nhất mà bạn muốn phụ thuộc, bạn có thể thấy rằng gói của bạn không tương thích với các gói khác cũng phụ thuộc vào NHibernate chẳng hạn vì gói khác phụ thuộc vào NHibernate [3.2.0.3002,3.3) có nghĩa là ít nhất 3.2.0.3002 nhưng thấp hơn 3.3.

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