【问题标题】:Nuget package dependency versionsNuget 包依赖版本
【发布时间】:2017-11-28 21:35:41
【问题描述】:

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

我创建了一个 nuspec 并发布到一个 nuget 提要,并且依赖项列表为...:

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

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

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

它编译,一切都很好。

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

System.IO.FileLoadException:无法加载文件或程序集 'RestSharp,版本 = 105.2.3.0,文化 = 中性,PublicKeyToken = null' 或其依赖项之一。定位程序集的清单定义 与程序集引用不匹配。

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

【问题讨论】:

    标签: nuget nuspec


    【解决方案1】:

    您指定的.nuspec 文件的 sn-p 对我来说似乎有点奇怪。我从未见过 d 命名空间,而 dependencies 是一个父节点,它应该为您定位的每个单独的包包含一个 dependency 元素。

    然后你提到新版本是1.6.1,应该是106.1.0。由于版本的第一部分(105 > 106)增加了,我们正在谈论一个主要的增加。这通常意味着公共 API 中的重大更改。通常客户端无法安全地更新具有主要增量的软件包,而无需更改软件。

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

    在您的情况下,我建议您创建一个新版本的“包装”NuGet 包。将依赖项更新到 RestSharp 以要求版本 106.1.0,或至少与您直接引用的版本相同。您可以将版本属性设置为例如[106.1,107)。这意味着 106.1 及更高版本的任何版本都可以使用,直到(独家)107.x。

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

    这里还列出了可能的version ranges 及其相应的语法。

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 1970-01-01
      • 2021-10-13
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-19
      • 1970-01-01
      相关资源
      最近更新 更多