[英]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
文件夾包含:
因此,我的理解是,由於我的項目位於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.5
, v4.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.