簡體   English   中英

NuGet包版本不匹配參考版本

[英]NuGet Package version not matching reference version

我一直在調試我的程序的問題,我發現我的幾個NuGet包的版本與Reference Properties中顯示的版本不匹配。 例如,查看我安裝的NuGet包,我有以下內容:

在此輸入圖像描述

當我在References組中選擇log4net時(在解決方案資源管理器下),我看到:

在此輸入圖像描述

NuGet報告已安裝的版本為2.0.5,但Reference報告版本為1.2.15。

有人可以解釋為什么會這樣,如果這是一個問題? 我和Newtonsoft.Json有同樣的問題,其中NuGet顯示的是8.0.3的版本但是References顯示的是8.0.0的版本

訣竅是你要比較不同的東西。

Nuget會顯示包含其包版本號的可用包。 這是包所有者在nuget spec文件的version字段中聲明的內容 在nuget完成將這些外部文件提取到項目之后,此版本沒有任何意義或影響。 它與包裝中的確切含義沒有任何直接關系。

另一方面,引用屬性查看dll,而不關心它來自哪個包。 顯示的版本是在編譯期間使用代碼中的AssemblyVersionAttribute屬性嵌入DLL中的版本號 這是在運行時期間實際用於查找和加載引用邏輯的版本。

通常,如果包版本和dll版本匹配會有意義,但沒有硬性規則來強制執行此操作。 它會變得棘手,即使它確實如此,因為一個包可能包含許多dll和其他文件,每個文件版本不同。

關於這個具體案例,我沒有任何信息,為什么業主已經做出了這種差異,也沒有根據他們的版本邏輯。 如果沒有記錄,那么您可以向他們發送消息並詢問其含義。

好處是,除了一點混亂之外,如果dll做了你期望它做的事情並通過質量保證,那么包中的版本號差異在實踐中無關緊要。

編輯:請注意,只有第3個數字的版本號差異對於使用語義版本控制實踐的庫來說很常見,其中第三個組件凹凸表示不間斷的錯誤修復版本。 保持相同的AssemblyVersion (例如:Newtonsoft.Json的“8.0.0”)允許就地升級,而無需重新編譯引用具有相同major-minor(8.0.0,8.0.1,8.0.2)的先前版本的所有程序集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM