C# 如何在nuspec中指定特定的依赖项版本?

C# 如何在nuspec中指定特定的依赖项版本?,c#,.net,nuget,nuget-package,C#,.net,Nuget,Nuget Package,我正在创建我的第一个nuget包。我添加了一个版本不是最新版本的依赖项。但是,我不想更新到这个依赖项的最新版本。是否可以指示其使用特定版本 <dependencies> <dependency id="NHibernate" version="3.2.0.3001" /> </dependencies> 当我安装软件包时,会创建以下内容 <packages> <package id="Iesi.Collections" versio

我正在创建我的第一个nuget包。我添加了一个版本不是最新版本的依赖项。但是,我不想更新到这个依赖项的最新版本。是否可以指示其使用特定版本

<dependencies>
  <dependency id="NHibernate" version="3.2.0.3001" />
</dependencies>
当我安装软件包时,会创建以下内容

<packages>
  <package id="Iesi.Collections" version="3.2.0.4000" />
  <package id="NHibernate" version="3.2.0.4000" />
</packages>

我真的很想看到这样的东西:
正在尝试解析依赖项“NHibernate(3.2.0.3001)”。

您应该能够强制使用带括号的精确版本:

<dependency id="NHibernate" version="[3.2.0.3001]" />

有关您可以使用的格式的完整信息,请访问NuGet网站:


在用户端,您还可以通过在packages.config中指定allowedVersions来约束升级。

根据和其他来源,只需将下限指定为

<dependencies>
  <dependency id="NHibernate" version="3.2.0.3001" />
</dependencies>

将产生与该版本匹配的最低主要/次要版本的最高版本/补丁级别

除非我完全误解了文档,否则这将匹配最高的3.2.*版本,而不是3.3.*或更高版本,除非找不到3.2.*版本

如果出于某种原因,3.2.0.3001是您希望依赖的唯一版本,您可能会发现您的包与同样依赖于NHibernate的其他包不兼容,例如,因为其他包依赖于NHibernate[3.2.0.3002,3.3),这意味着至少3.2.0.3002,但低于3.3。

从,完整的符号:


我不知道我怎么找不到那个页面!谢谢。你可以这样做。但请记住,任何使用你的软件包并同时使用NHibernate的人都不能出于任何原因更新NHibernate,除非你允许。这不是一个很好的状态。@Anthony我认为这个评论更适合我回答的问题;我只是在展示如何更新做吧,不要鼓吹。不过,你描述的问题并不容易解决;如果你有两堆代码不能在同一版本的NH中工作(因为bug、API差异等等),那么你已经完蛋了。真正的解决办法是私有依赖关系(如Node),但我看不到.NET能得到“适当”的支持:(是的,我同意,并将重新附上评论。明确地说,“锁定版本”最近,我对它记忆犹新。在我们的例子中,版本锁定的包不是NHib,而是一个完全不相关的包。如果库中存在真正的破坏性更改,那么锁定版本可能是必要的,但在我们的例子中,没有;只是过度使用了此语法。所以请小心使用它!您可以按照下面的回答执行此操作。But记住,任何使用您的软件包并同时使用NHibernate(或您指定了确切软件包版本的任何其他依赖项)的人都无法出于任何原因更新此文件,除非您允许。这是一种糟糕的状态。“锁定版本”最近告诉我们:在我们的例子中,版本锁定的包不是NHib,而是一个不相关的包。如果上游库中存在真正的破坏性更改,那么锁定版本可能是必要的,但在我们的例子中没有;只是过度使用了此语法。因此,如果您使用它,请小心使用!从今天起,参考更改为
<dependencies>
  <dependency id="NHibernate" version="3.2.0.3001" />
</dependencies>