[英]Detected package downgrade warning (dotnet core, vs 2017)
在打開現有解決方案后,我遇到了這種情況,但不是警告,而是錯誤。
我打開了 YourAwesomeApp.csproj 文件並逐一檢查了“檢測到的包降級”錯誤,並手動將該行項目的版本從現有版本更改為錯誤本身中顯示的指定版本。
例如,如果錯誤顯示降級檢測到“SqlServer 1.0.4 -> 1.0.3”,則找到包 SqlServer 的行並將版本從 1.0.3 編輯為 1.0.4。
構建項目后,這些錯誤應該會消失。
這樣做的缺點是這次我只有 5 個錯誤,但是如果另一個人的項目包含 50 個這樣的錯誤怎么辦。 那么那個人手動編輯這些行的任務將是非常乏味和耗時的。
這通常是因為您嘗試安裝的項目需要比您已包含在項目中的子依賴項的更新版本。
解決方案是在安裝包之前更新或刪除項目中的現有依賴項。
例子:
檢測到包降級:Newtonsoft.Json 從 9.0.0 到 8.0.0。
這意味着您的項目中已將 Newtonsoft.Json 8.0.0 列為依賴項,但您嘗試安裝的包至少需要 9.0.0 版作為依賴項。
這是因為Visual Studio 不會自動升級此依賴項,因為您已為項目指定了顯式版本。 您可以將項目中的依賴項升級到所需的最低版本,也可以將其從項目中刪除,然后讓正在安裝的包處理它。
要解決這個問題,在我們上面的示例中,這意味着找到“Newtonsoft.Json 8.0.0”並將其升級到“9.0.0”版本,或者在安裝包之前將其從項目中刪除。
根據上面的答案,工作解決方案是從您的 csproj 文件中刪除以下行。
網絡應用項目:
<RuntimeFrameworkVersion>1.0.4</RuntimeFrameworkVersion>
庫項目:
<NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>
在我的情況下,這些屬性都沒有在我的 csproj 文件中設置。
我不得不告訴 VS 通過 NuGet 更新這些包。
在解決了從 1.0 到 1.1 后顯式引用隱式依賴項 .NETCore.App 的警告后,我出現了警告。
這似乎也影響升級到2.0,分辨率是一樣的。 使用 NuGet 手動更新這些包。 感謝 IbrarMumtaz 指出這一點!
我能夠修復一些錯誤,比如在 cproj 中添加 NoWarn
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<NoWarn>$(NoWarn);NU1605</NoWarn>
</PropertyGroup>
...
</Project>
您可能只想在多個軟件包升級期間臨時添加它並稍后將其刪除。
通過從csproj
文件中刪除<NetStandardImplicitPackageVersion>
元素,我能夠在我的項目中擺脫這些警告。
這篇文章中有一些關於隱式元包的信息,這似乎是這個問題的根本原因。
您可能還需要更新一些依賴項。 例如,我必須將BenchmarkDotNet
從0.10.1
升級到0.10.3
以消除一些警告,例如您看到的警告。
我得到:
錯誤 NU1605:檢測到包降級:System.Net.NameResolution 從 4.3.0 到 4.0.0。 直接從項目中引用包以選擇不同的版本。
所以我通過運行(在項目文件夾中)引用了包目錄:
dotnet add package System.Net.NameResolution
問題:
一個依賴包指定了一個比最終解決的還原更高版本的包的版本約束。 也就是說,由於解析包時的“最近獲勝”規則,圖中較近的包可能已覆蓋較遠的包。
解決方案:
為要使用的更高版本的包添加對項目的直接引用。
嘗試刪除:
<IsPackable>false</IsPackable>
來自您的項目文件 - 這對我有用!
如果您仍然留下NU1605
錯誤代碼,您可以通過將以下內容添加到您的項目文件中來忽略它:
<PropertyGroup>
<NoWarn>NU1605</NoWarn>
</PropertyGroup>
就我而言,此錯誤與 .NET Core 無關,而是與 .NET Standard 相關。
我有兩個庫 A 和 B。庫 A 依賴於某個 nuget 包 X,庫 B 依賴於 A。一旦我將 X 升級到新版本,它就以某種方式開始依賴於新版本的NETStandard.Library nuget 包(來自2.0.2 到 2.0.3),這破壞了 B 的構建,錯誤Detected package downgrade: NETStandard.Library from 2.0.3 to 2.0.2. Reference the package directly from the project to select a different version
Detected package downgrade: NETStandard.Library from 2.0.3 to 2.0.2. Reference the package directly from the project to select a different version
。
一旦我將 NETStandard.Library nuget 包作為依賴項添加到 B(顯然針對最新版本 2.0.3),即使出現新警告,錯誤也消失了:
/usr/local/share/dotnet/sdk/2.1.403/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.DefaultItems.targets(5,5): 警告 NETSDK1023: A PackageReference for 'NETStandard.Library ' 已包含在您的項目中。 此包由 .NET SDK 隱式引用,您通常不需要從項目中引用它。 有關更多信息,請參閱https://aka.ms/sdkimplicitrefs (NETSDK1023) (GWallet.Frontend.XF)
從項目中手動刪除 nuget 包依賴項,並為每個包安裝包解決了我的問題。
我試圖將 Microsoft.AspNetcore.MVC 升級到版本 2+。 我的解決方案是首先將所有其他依賴項升級到 2+,然后最后升級 .MVC。
我可以通過下載導致問題的包的早期版本來解決這個問題,這似乎是由未安裝的 .NET Standard 版本引起的,這也應該通過更新 Visual Studio 來解決。
如果您在netcoreapp3.1
收到Razor
此錯誤,您只需將項目 SDK 從Microsoft.NET.Sdk.Razor
更改為Microsoft.NET.Sdk
。
對我來說,問題是我在本地安裝了比我的項目引用的版本更高的軟件包。 如果您轉到“工具” >“ NuGet 包管理器” >“包管理器設置” >“常規” >“清除所有 NuGet 緩存”,然后重新構建您的解決方案,它將安裝引用的包,並且錯誤將消失。
我有一個類似的問題,我的項目有這樣的包引用:
包參考:
Package A
Package B
Package A
所以因為項目 B 引用了包 A,我只是從主包列表中刪除了包 A,剩下的包 B 引用了包 A。我重新構建了解決方案,問題就消失了。
復制路徑並檢查。 就我而言,該項目引用的是 4.6.0,但我要安裝的程序集至少需要 System.Diagonistics.DiagonsticSource 的 5.0.0 版本
我最近剛遇到這個問題,更新 NuGet 包對我有用。
因此,請嘗試完全卸載該軟件包並重新安裝。 確保為所有引用它的解決方案項目執行此操作。 然后只是清理和重建。 這對我有用。
對我來說,這是由於使用指定版本的 Microsoft.AspNetCore.App 引用項目引起的,而我的項目沒有:
我的項目 :
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App"/>
</ItemGroup>
參考項目:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.2" />
</ItemGroup>
修復(我的項目):
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.2" />
</ItemGroup>
對於我的項目,清理和重建並不能解決我的問題。 經過一番搜索,我嘗試刪除所有 debug/obj 文件夾,然后重新構建它並且它可以工作,希望這可以幫助遇到這個問題的任何人。
由於這個答案,我解決了這個問題。 基本上,只需在.csproj
文件的<PropertyGroup>
標簽內添加以下行:
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.