如何创建最有可能不会引起版本问题的软件包?

时间:2019-06-06 10:56:00

标签: nuget

我用空的记录器创建了一个NuGet程序包,该程序包取决于 Microsoft.Extensions.Logging.Abstractions

PackageReference文件中的dependency我的.nuspec设置为 1.0.0 ,没有特殊语法,我了解的意思是>=

我的空记录器在此版本上运行良好,我认为使用最低运行版本的abstractions库会使我的软件包更容易被可能具有更高版本的应用程序使用。

但是,当我从xUnit测试项目中引用我的程序包时,会出现红色的编译器错误CS1705。

我的测试项目引用了两个软件包:

  1. 该项目正在测试,这是一个ASP.NET Core Razor Pages网站,该站点依次引用了 Microsoft.AspNetCore.App 2.2.0 元包中包含的同一日志记录抽象包。

  2. 我的空记录程序包,该程序包依次引用了我所描述的记录抽象1.0.0.0。

测试项目中的编译器错误说:

  

Assembly(Razor Pages proj)使用(Abstractions 2.2.0.0),其版本高于具有标识(Abstractions 1.0.0.0)的引用程序集(Abstractions)。

我的包裹可以使用更高的版本,所以我想念什么?


修改

这是一张高保真图;)

Dependency graph

  • T是“ xUnit Proj”。
  • W是受测试的“网站项目”。
  • E是空的记录程序包(位于nuget.org上的Evoq.Instrumentation)
  • A是元包Microsoft.AspNetCore.App 2.2.0
  • L是Microsoft.Extensions.Logging.Abstractions

有一个最接近的获胜规则,我认为这意味着从T到E到E的依赖关系将获胜,并且将使用2.0.0版,但我希望软件包降级警告不是硬编译器错误。

最近获胜:https://docs.microsoft.com/en-us/nuget/consume-packages/dependency-resolution#nearest-wins

编辑2

在我看来,T> W是项目参考。因此,这可能会使NuGet分辨率短路。我将从T到A的引用直接添加,看看是否能解决。

1 个答案:

答案 0 :(得分:0)

我忘了T> W是项目参考。因此,我认为这会使我期望发生的NuGet分辨率短路。

我将T的引用直接添加到A,这样就解决了。