簡體   English   中英

多目標NuGet程序包的錯誤依賴關系解決

[英]Erroneous dependency resolving for multi-targeting NuGet package

我在NuGet中使用基於組的依賴項規范時如何解決依賴項感到困惑。

我有一個針對.NET Framework 4.6.1的Visual Studio項目,該項目具有對NuGet包的NuGet依賴關系(在我公司內部):

這是在我的項目的packages.config文件中:

<package id="Name.Of.My.Package" version="2.0.65" targetFramework="net461" />

這是在.csproj文件中:

<Reference Include="Name.Of.My.Package, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\\packages\\Name.Of.My.Package.2.0.65\\lib\\net45\\Name.Of.My.Package.dll</HintPath> </Reference>

該程序包是具有基於組的依賴關系規范的多目標程序包,當我直接從通過打開packages\\Name.Of.My.Package.nupkg文件作為存檔而獲得的.nuspec文件中獲取該packages\\Name.Of.My.Package.nupkg時,它看起來像這樣:

<dependencies> <group> <dependency id="Newtonsoft.Json" version="11.0.2" /> </group> <group targetFramework=".NETFramework4.0"> <dependency id="Microsoft.Bcl.Async" version="1.0.168" /> </group> </dependencies>

然后, packages\\Name.Of.My.Package\\lib文件夾包含:

  • net40
  • net45
  • nestandard2.0

因此,我的理解是,由於我的項目位於net461中,因此應該將引用添加到程序包的net45版本中(就像我查看.csproj文件時的情況一樣),但更重要的是,唯一的隱式依賴關系應該去Newtonsoft。

但是,當我嘗試在程序包管理器控制台中刪除Microsoft.Bcl.Async程序包時,會發生這種情況:

Uninstall-Package Microsoft.Bcl.Async Attempting to gather dependency information for package 'Microsoft.Bcl.Async.1.0.168' with respect to project 'Name.Of.My.Project', targeting '.NETFramework,Version=v4.6.1' Resolving actions to uninstall package 'Microsoft.Bcl.Async.1.0.168' Uninstall-Package : Unable to uninstall 'Microsoft.Bcl.Async.1.0.168' because 'Name.Of.My.Package.2.0.65' depends on it.

這是最新版本的Visual Studio 2017(15.8.6)中發生的情況。

多目標NuGet程序包的錯誤依賴關系解決

這是nuget的正確行為。 眾所周知, .NET Frameworks是向后兼容的。 這意味着,如果您的項目面向v4.6 ,則可以使用版本較低的軟件包,例如v4.5v4.0

NuGet的專長是兼容性檢查(如果軟件包是由ofc正確編寫的):) NuGet知道可用的框架是v3.5,v4.0,v4.6和netstandard1.3。 v4.5的“最近”兼容框架是v4.0,因此在安裝時會選擇v4.0資產

來源: 如何找出缺少框架的依賴包信息

因此,nuget將安裝依賴項“最近”向后兼容的框架v4.6.1,在這種情況下,還將安裝依賴項Microsoft.Bcl.Async

這就是為什么在安裝軟件包Name.Of.My.Package時無法卸載軟件包Microsoft.Bcl.Async的原因。

例如,當您將包Microsoft.AspNet.WebApi.Client 5.2.6添加到.net Framework 4.6.1項目中時,nuget還將在.net framework 4.5下添加依賴項Newtonsoft.Json (>= 6.0.4)

在此處輸入圖片說明

在此處輸入圖片說明

有關更多詳細信息,請查看此文檔

暫無
暫無

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

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