如何构建 nuget 包来支持一系列依赖版本?

问题描述 投票:0回答:1

所以我有一个 nuget 包和两个组织内依赖的消费者。我的第一个消费者使用 Newtonsoft.Json 13.0.1,第二个消费者使用 Newtonsoft.Json 11.0.1。

第二个消费者实际上是一个非常大的代码库,包含许多项目,更新到 13.0.1 或在各处添加绑定重定向对他们来说将是一个套件范围的回归测试工作,他们在组织截止日期之前没有时间进行。作为最方便的选项,我更新了 csproj 以包含两种不同的构建配置:Release 和 ReleaseCompatibility,大致如下

<ItemGroup Condition="'$(Configuration)'=='Release'">
  <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)'=='Release<consumer2>Compatibility'">
  <PackageReference Include="Newtonsoft.Json" Version="11.0.1" />
</ItemGroup>

上面的内容看起来有点笨拙——需要用两个不同的版本构建两次包是一回事,但想象一下我有一大群需要不同包版本的消费者,维护多个构建版本将是一个巨大的痛苦。

我知道我可以对次要版本使用通配符,例如

<PackageReference Include="Newtonsoft.Json" Version="13.*" />
,如果我的消费者使用相同的主要版本,它就会起作用;但我不认为我可以很好地将通配符作为主要版本 - 这太宽泛了。

我有什么办法可以做类似的事情

<PackageReference Include="Newtonsoft.Json" Version="11.0.1 - 13.0.1" />

为了明确声明“我正在使用的这个库的功能在版本 11.0.1 和 13.0.1 之间足够一致,我可以使用它们中的任何一个,这样我就可以与一系列消费者兼容,而无需构建多个版本”?

(作为参考,我查看了微软关于支持多个框架的文档,并注意到它有一个关于声明依赖关系的部分,但这似乎并不正是我正在寻找的,因为现在一切都在相同的框架版本;我的 google-fu 不知道如何处理一系列依赖项)

c# .net dependency-management csproj
1个回答
0
投票

你应该能够做这样的事情:

<PackageReference Include="Newtonsoft.Json" Version=[11.0.1, 13.0.1]" />

或者接受所有小于 14,上限可以是互斥的:

<PackageReference Include="Newtonsoft.Json" Version=[11.0.1, 14)" />
© www.soinside.com 2019 - 2024. All rights reserved.