2017-06-01 101 views
4

當我運行dotnet restore(或運行包在Visual Studio中恢復),我看到的警告是這樣的:「檢測到的軟件包降級」警告是什麼意思?

/usr/local/share/dotnet/sdk/1.0.4/NuGet.targets(97,5): warning : Detected package downgrade: Microsoft.EntityFrameworkCore.Design from 1.1.1 to 1.0.3 [/Users/markamery/somesolution/SomeSolution.sln] 
/usr/local/share/dotnet/sdk/1.0.4/NuGet.targets(97,5): warning : SomeProject (>= 1.0.0) -> Microsoft.EntityFrameworkCore.Tools (>= 1.1.0) -> Microsoft.EntityFrameworkCore.Design (>= 1.1.1) [/Users/markamery/somesolution/SomeSolution.sln] 
/usr/local/share/dotnet/sdk/1.0.4/NuGet.targets(97,5): warning : SomeProject (>= 1.0.0) -> Microsoft.EntityFrameworkCore.Design (>= 1.0.3) [/Users/markamery/somesolution/SomeSolution.sln] 

我掙扎解析上述警告的意思。各種事情我不清楚:

  • 什麼是「包降級」,在這種情況下?
  • 是什麼導致「軟件包降級」發生?
  • 下面是什麼行「Detected package downgrade」是什麼意思?特別是那些包裹之間的箭頭(->)傳達了什麼?

回答

8

在這種情況下,您的依賴關係圖引用Microsoft.EntityFrameworkCore.Design的兩個版本。這是由含有->行表示:

第一行後,它表明你的項目引用Microsoft.EntityFrameworkCore.Tools版本1.1.0,其解析爲一個包,裏面Microsoft.EntityFrameworkCore.Design1.1.1版本引用。

然後顯示您的包直接引用Microsoft.EntityFrameworkCore.Design1.0.3

NuGet documentation for dependency resolution狀態,這將適用於這種情況的規則:

最近的勝

當一個應用程序的包圖包含 不同版本的同一個包的,這是最接近的包到 圖中的應用程序被使用,其他被忽略。這個 允許應用程序覆蓋依賴關係圖中的任何特定程序包版本。

此規則適用於此,因爲您的應用直接引用不同於其他依賴項的軟件包版本。由於此版本較低,因此NuGet會發出警告提醒您,因爲其他依賴項可能會期望某些功能不存在於較低版本中。該文檔還包括關於這樣的警告:

的最近勝規則可導致封裝 版本降級,從而可能破壞在圖中其他依賴關係。 因此,此規則應用警告以提醒用戶。

+0

如果我處於降級會破壞另一個包的情況下該怎麼辦,但刪除降級會打破需要降級的包?運氣不好?我猜想需要降級的軟件包需要修復才能使用新版本的依賴項? – Bassebus

+0

如果兩個版本之間發生了重大變化,那麼是的,你運氣不好。其中一個軟件包需要修復,或者如果可能的話,您需要使用所有軟件包的較低版本。 –

相關問題