Nuget包依赖版本

时间:2017-11-13 16:22:32

标签: nuget nuspec

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

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

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

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

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

它汇编而且一切都很好。

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

  

System.IO.FileLoadException:无法加载文件或程序集   'RestSharp,Version = 105.2.3.0,Culture = neutral,PublicKeyToken = null'   或其中一个依赖项。定位程序集的清单定义   与装配参考不匹配。

如何在我的nuget包中明确表示我只想要一个105.2.3的MINIMUM - 但是任何更新的版本也可以吗?

1 个答案:

答案 0 :(得分:1)

您指定的.nuspec文件的片段对我来说有点奇怪。我从未见过d命名空间和依赖关系是一个父节点,对于您要定位的每个单独的包,它应包含dependency元素。

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

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

在您的情况下,我建议您创建一个新版本的&#39;包装器&#39; NuGet包。将依赖关系更新为RestSharp以要求版本106.1.0,或者至少是您直接引用的相同版本。您可以将version属性设置为实例[106.1,107)。这意味着任何版本的106.1及更高版本都可以,直到(独占)107.x。

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

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