强制更新可传递nuget包依赖性的最佳方法?

时间:2019-12-03 10:35:07

标签: .net-core nuget packagereference

考虑一个.NET Core应用程序(A),该应用程序使用B模型引用第三方nuget程序包(PackageReference)。软件包B自己依赖于另一个软件包(C):

A -> B -> C

B声明对C的依赖,版本约束为>= 1.0.0A没有C的编译时用法,也没有直接引用它-C是传递性的运行时依赖项。

但是,软件包C的1.0.0版本(由构建程序拾取)中存在一个错误。该错误已在较新的版本中修复,并以次要版本(例如v1.1.0)递增的形式发布到nuget。

默认情况下,我的版本不采用此最新版本。我认为这是由于“最低适用版本”规则所致,如下所述: https://docs.microsoft.com/en-us/nuget/concepts/dependency-resolution#dependency-resolution-rules

建议强制采用哪种方法来强制内部版本获取软件包C的错误修复1.1.0版本?

一种解决方案是显式引用C中软件包A的1.1.0版本。但是,这感觉就像我在破坏封装,因为A不需要了解关于C的任何信息。

理想情况下,软件包B的作者将更新对C的依赖以使用更新的版本,但是我对此软件包没有任何控制权。

我还尝试在解决方案的根目录使用Directory.Build.props文件,以尝试强制在整个解决方案中更新版本:

  <ItemGroup>
    <PackageReference Update="SomePackage.C" Version="1.1.0" />
  </ItemGroup>

...但是这不起作用(我认为“最低适用版本”规则仍然适用)。如果您使用Include而不是Update,它确实有效,但这只是将软件包安装到解决方案中的所有项目中。

我希望能够为构建过程提供一些“策略”,以强制选择更新的版本,但是我还没有找到一种方法。


注意:我的实际示例比此处概述的示例更为复杂。 BC都是广泛使用的Microsoft ASP.NET程序包,C出现在依赖关系图中的许多位置(我自己的应用程序从未直接引用该代码)。

0 个答案:

没有答案