Nuget 包依赖版本

Nuget package dependency versions

假设我创建了一个新库,它使用 RestSharp 包装了一个休息服务。

我创建了一个 nuspec 并发布到 nuget 提要,依赖项列表为...:[=​​12=]

...
<d:Dependencies>RestSharp:105.2.3</d:Dependencies>
...

现在我在一个项目中引用这个包,该项目已经引用了 RestSharp。

发布了 RestSharp 更新,现在是 1.6.1 版,我更新了我的项目(但不是 nuget 包,它仍然将 105.2.3 列为依赖项)。

编译成功,一切正常。

但是,当我尝试从更新后的代码 运行 我的库时,我收到此错误...:[=​​12=]

System.IO.FileLoadException: Could not load file or assembly 'RestSharp, Version=105.2.3.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.

如何在我的 nuget 包中明确表示我只想要 105.2.3 的最小值 - 但任何较新的版本也可以?

我觉得您指定的 .nuspec 文件的片段有点奇怪。我从未见过 d 命名空间,dependencies 是一个父节点,它应该包含一个 dependency 元素,用于您定位的每个单独的包。

那你说新版本是1.6.1,应该是106.1.0。由于版本的第一部分 (105 > 106) 增加了,我们正在谈论一个主要的增加。这通常意味着 public API 中的重大更改。通常,客户无法在不更改软件的情况下安全地更新具有主要增量的软件包。

我认为第 Cousin dependencies 段描述了您 运行 遇到的问题。

对于你的情况,我建议创建一个新版本的 'wrapper' NuGet 包。将对 RestSharp 的依赖项更新为需要版本 106.1.0,或者至少与您直接引用的版本相同。例如,您可以将版本属性设置为 [106.1,107)。这意味着 106.1 及更高版本的任何版本都可以,直到(独占)107.x.

依赖元素的version属性允许使用特定语法来指定特定的版本控制策略。看看 NuSpec docs at Microsoft.

这里还有一个可能的列表 version ranges 及其相应的语法。