2011-10-14 112 views
65

我正在創建我的第一個nuget包。我添加了一個不是最新版本的版本的依賴關係。但是,我不想更新到此依賴項的最新版本。是否可以指示它使用特定版本?如何在nuspec中指定特定的依賴版本?

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

當我安裝包我看到這一點:

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

這將創建下列當我安裝軟件包。

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

我真的希望看到這樣的事情: 試圖解決依賴 'NHibernate的(3.2.0.3001)'。

+3

你可以做到這一點,如下回答。但是請記住,任何使用你的包並且也使用NHibernate的人(或者你指定了確切包版本的任何其他依賴),除非你允許,否則不能以任何理由更新它。這是一個糟糕的情況。最近我們使用了一個「鎖定版本」:在我們的例子中,版本鎖定的軟件包不是NHib,而是一個不相關的軟件包。如果上游圖書館存在真正的突破性變化,那麼鎖定版本可能是必要的,但在我們的案例中,我們沒有;只是過度使用這種語法。所以如果你使用它,請謹慎使用它! – Anthony

回答

96

你應該能夠強行與括號中的準確版本:

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

的格式全部信息,您可以使用都在的NuGet網站,在這裏:

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

+0

我不知道我是怎麼找不到那個頁面的!謝謝。 – devlife

+0

你可以這樣做。但請記住,任何使用你的軟件包並使用NHibernate的人,除非你允許他們,否則不能以任何理由更新NHibernate。這不是一個很好的事態。 – Anthony

+0

@Anthony我認爲這個評論在我的答案這個問題上更好。我只是在展示如何去做,而不是主張它。你所描述的問題並不容易解決,如果你有兩個代碼不能使用相同版本的NH(因爲bug,API差異,不管),那麼你已經搞砸了。真正的解決方案是私有的依賴關係(比如Node),但是我看不到.NET對此有適當的支持:( –

2

根據http://nuget.codeplex.com/wikipage?title=Dependency%20Resolution和其他來源,只需指定下限爲

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

將導致匹配版本最低的主要/次要版本的最高版本/補丁級別。

除非我完全誤解了文檔,否則它將匹配最高的3.2。*版本,但不匹配3.3。*或更高版本,除非找不到3.2。*版本。

如果3.2.0.3001是您希望依賴的唯一版本,您可能會發現您的軟件包與其他也取決於NHibernate的軟件包不兼容,例如,因爲其他軟件包依賴於NHibernate [3.2.0.3002,3.3]表示至少3.2.0.3002但低於3.3。

相關問題