假设我创建了一个新的库,它使用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 - 但是任何更新的版本也可以吗?
答案 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及其相应的语法。