Chr*_*ook 10 nuget .net-core packagereference
考虑一个 .NET Core 应用程序 ( A),它B使用PackageReference模型引用第三方 nuget 包 ( ) 。包B对另一个包 ( C)有自己的依赖:
A -> B -> C
Run Code Online (Sandbox Code Playgroud)
包B声明依赖于C版本约束为>= 1.0.0. A没有编译时使用C并且不直接引用它 -C是一个可传递的运行时依赖项。
但是,包的 1.0.0 版C(由构建选择)有一个错误。该错误已在更新的版本中得到修复,发布到 nuget 并增加了次要版本(例如 v1.1.0)。
默认情况下,我的构建不会选择这个最新版本。我相信这是由于“最低适用版本”规则,这里描述:https : //docs.microsoft.com/en-us/nuget/concepts/dependency-resolution#dependency-resolution-rules
强制构建选择错误修复 1.1.0 版本的包的推荐方法是什么C?
一种解决方案是C从A. 然而,这感觉就像我打破了封装,因为A不应该需要知道任何关于C.
理想情况下,包的作者B会更新他们对C使用较新版本的依赖,但我对这个包没有任何控制权。
我还尝试Directory.Build.props在解决方案的根目录使用一个文件,尝试强制在整个解决方案中更新版本:
<ItemGroup>
<PackageReference Update="SomePackage.C" Version="1.1.0" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
...但这不起作用(我假设“最低适用版本”规则仍然适用)。如果您使用而不是 ,它确实有效,但这只是将包安装到解决方案中的所有项目中。IncludeUpdate
我希望能够为构建过程提供一些“策略”,以强制获取更新的版本,但我还没有找到一种方法来做到这一点。
注意:我的实际示例比此处概述的示例更复杂。双方B并C广泛使用的微软ASP.NET包,并C出现在几十个依赖关系图的地方(我自己的应用程序从未引用的代码直接)。
小智 2
强制更新传递 Nuget 包依赖项的最佳方法是将直接引用的包更新到包含更新的传递依赖项的较新版本
Tools > NuGet Package Manager > Package Manager Console。Update-Package <directly referenced package name> -Version <new version>。例如,如果直接引用的包是Newtonsoft.Json,则命令将为Update-Package Newtonsoft.Json -Version 12.0.3。这将更新直接引用的包并更新任何传递依赖项。如果包仍然没有更新,请尝试删除解决方案中的包文件夹,然后Update-Package再次运行该命令。这将强制 NuGet 下载所有包及其依赖项的最新版本。
在某些情况下,您可能还需要更新项目文件 (.csproj) 以包含最新版本的依赖项。
| 归档时间: |
|
| 查看次数: |
940 次 |
| 最近记录: |