2013-08-27 52 views
0

我們假設有一個項目取決於xunit v 1.9.1包,其輸出程序集以nuget包形式發佈。 現在,如果軟件包是使用Install-Package命令安裝的,則依賴於xunit的軟件包將安裝爲v1.9.2而不是v1.9.1。爲什麼nuget的行爲重新獲得最新的包似乎不一致?

我不能在其他軟件包中觀察這種情況。這件事有什麼意義嗎?

在這個問題上,nuget版本是v2.7


[更新]

下面的代碼段是上面提到的我的測試項目的nuspec文件的一部分。

<dependencies> 
    <dependency id="xunit" version="1.9.1" /> 
    <dependency id="Moq" version="4.0.10827"/> 
</dependencies> 

當我安裝我的測試項目,起訂量包安裝與上述規定的相同版本,但最近的起訂量的版本是v4.1.1308.2321,這是不按semver重大更改。相反,xunit軟件包被安裝爲最新的v 1.9.2

+0

我預計pother包將採取同樣的方式,除非你指定的其他方式最近安裝。我有時遇到的情況是,當我逐漸從我自己的nuget回購版升級版本時,有時nuget不會自動刪除舊包裝的痕跡,儘管它不再被用於任何地方。但那是另一個問題。 –

回答

1

這取決於軟件包清單。如果您要寫信pack命令檢測來自csproj的依賴關係,則它將指定版本爲1.9.1。但是,NuGet將其視爲最低版本,而不是所需的版本。

http://docs.nuget.org/docs/reference/versioning#Specifying_Version_Ranges_in_.nuspec_Files

現在,因爲新版本是1.9.2,它不被視爲每語義版本重大更改,因此它是安全的安裝。

http://semver.org/

還應注意這個博客帖子爲的NuGet如何解決版本。也就是說,它將爲指定的主版本和次版本安裝最新的修補程序。

http://blog.davidebbo.com/2011/01/nuget-versioning-part-2-core-algorithm.html

+0

請查看我的更新問題... –

+0

@ Jin-WookChung請參考我答案中的第一個鏈接。指定版本意味着這是所需的最低版本,而不是特定的版本。 – cadrell0

+0

是的,但是,moq軟件包不會自動更新到最新版本,即使它的版本沒有發生變化。 –

0

你明確指定了一個版本嗎?如果不是這樣,那麼我對1.9.2的安裝並不感到驚訝,因爲這是最新的,並且它向後兼容1.9.1。

這是一般的包管理系統的預期行爲,即如果不明確指定版本,它將嘗試抓取最新的版本。

您可以在項目的參考條目處更改該行爲(告訴確切的或最小的版本號)。事情還可能取決於nuget軟件包的元數據。

+0

請查看我更新的問題... –

相關問題