【问题标题】:How to specify specific dependency version in nuspec?如何在 nuspec 中指定特定的依赖版本?
【发布时间】:2018-11-07 21:48:00
【问题描述】:

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

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

当我安装软件包时,我看到了这个:

Attempting to resolve dependency 'NHibernate (≥ 3.2.0.3001)'.

这会在我安装软件包时创建以下内容。

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

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

【问题讨论】:

  • 您可以按照下面的回答执行此操作。但请记住,任何使用您的包并使用 NHibernate(或您指定了确切包版本的任何其他依赖项)的人都无法以任何理由更新此内容,除非您允许他们。这是一种糟糕的状况。最近出现了一个“锁定版本”:在我们的例子中,版本锁定的包不是 NHib,而是一个不相关的包。如果上游库中有真正的重大更改,则可能需要锁定版本,但在我们的情况下,我们没有;只是过度使用这种语法。所以如果你使用它,请谨慎使用!

标签: c# .net nuget nuget-package


【解决方案1】:

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

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

您可以使用的格式的完整信息在 NuGet 网站上,这里是:

http://docs.nuget.org/docs/reference/version-range-specification

【讨论】:

  • 你可以这样做。但请记住,任何使用您的软件包并同时使用 NHibernate 的人,除非您允许,否则无法以任何理由更新 NHibernate。这不是一个很好的状态。
  • @Anthony 我认为这个评论比我的回答更好;我只是在展示如何去做,而不是提倡它。您描述的问题并不容易解决;如果你有两段代码不能在同一个版本的 NH 上运行(因为 bug、API 差异等等),那么你就完蛋了。真正的解决办法是私有依赖(就像 Node 一样),但我看不到 .NET 得到“适当”的支持 :(
  • 是的,我同意并将重新附上评论。需要明确的是,最近有一个“锁定版本”让我们印象深刻,所以它在我脑海中很新鲜。在我们的例子中,版本锁定的包不是 NHib,而是一个完全不相关的包。如果库中有真正的重大更改,则可能需要锁定版本,但在我们的情况下,我们没有;只是过度使用这种语法。所以请谨慎使用!
【解决方案2】:

来自NuGet docs site,完整的符号:

【讨论】:

【解决方案3】:

从用户端,您还可以通过在 packages.config 中指定 allowedVersions 来限制升级。 http://docs.nuget.org/docs/reference/versioning#Constraining_Upgrades_To_Allowed_Versions

【讨论】:

【解决方案4】:

根据http://nuget.codeplex.com/wikipage?title=Dependency%20Resolution等消息来源,简单地将下界指定为

<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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    相关资源
    最近更新 更多