18

考虑一个 .NET Core 应用程序 ( ),它使用该模型A引用第三方 nuget 包 ( )。包对另一个包有自己的依赖关系():BPackageReferenceBC

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

一种解决方案是CA. 但是,这感觉就像我正在打破封装,因为A不需要知道任何关于C.

理想情况下,包的作者B会更新他们的依赖C以使用较新的版本,但我对这个包没有任何控制权。

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

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

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

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


注意:我的实际示例比此处概述的示例更复杂。两者都是广泛使用的 Microsoft ASP.NET 包,并且B出现在依赖关系图中的几十个位置(我自己的应用程序从不直接引用该代码)。CC

4

0 回答 0