考虑一个 .NET Core 应用程序 ( ),它使用该模型A
引用第三方 nuget 包 ( )。包对另一个包有自己的依赖关系():B
PackageReference
B
C
A -> B -> C
包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>
...但这不起作用(我假设“最低适用版本”规则仍然适用)。如果您使用而不是,它确实有效,但这只是将包安装到解决方案中的所有项目中。Include
Update
我希望能够为构建过程提供一些“策略”,以强制获取更新的版本,但我还没有找到这样做的方法。
注意:我的实际示例比此处概述的示例更复杂。两者都是广泛使用的 Microsoft ASP.NET 包,并且B
出现在依赖关系图中的几十个位置(我自己的应用程序从不直接引用该代码)。C
C