【问题标题】:Installing self-created Nuget package forces use of latest version of a dependency,安装自行创建的 Nuget 包会强制使用最新版本的依赖项,
【发布时间】:2011-09-20 17:55:57
【问题描述】:

我为我公司使用的库创建了一个 nuget 包。该库同时使用 Fluent NHibernate 1.3.0.717 和 Structure Map 2.6.2。

因为有些人使用的是 StructureMap 2.6.3,所以我将包的依赖项创建为:

<dependencies>
    <dependency id="FluentNHibernate" version="[1.3,)" />
    <dependency id="structuremap" version="[2.6.2,)" />
</dependencies> 

当包出现在 NuGet 中时,它说结构图 >=2.6.2 是必需的。到目前为止,一切顺利。

问题来了: 当我将此库添加到我的项目时,它总是安装 Structure Map 2.6.3。为此,它甚至会从我的项目中卸载 2.6.2。

我没有看到任何迹象表明结构映射 2.6.3 是 Fl​​uentNHibernate 的依赖项(或其任何依赖项),所以我非常困惑为什么它不会简单地将我的库添加到 FluentNHibernate 依赖项并留下我的单独使用 StructureMap 2.6.2。

我不知道这是否与此有关,但我们将软件包托管在 UNC 共享上。

【问题讨论】:

标签: nuget


【解决方案1】:

阅读 David Ebbo 的 blog series 关于 NuGet 版本控制和依赖项解析。

简而言之,我们总是选择具有最低主要和次要以及最高构建和修订号的依赖项(基于依赖项的约束)。这样您就可以在使用包作为依赖项时自动获得错误修复(非破坏性)。

【讨论】:

  • 我不必喜欢它,但很高兴了解一切都按预期运行。谢谢。
  • 顺便说一句 1.3 == [1.3,) 所以你不需要 [version,) 这是隐含的。
  • 如果它应该选择具有最高版本号的构建,那么它就会被破坏。案例和要点:安装 MvcSiteMapProvider.MVC4。安装的 MvcSiteMapProvider.Web 版本始终是最早的补丁。它在 nuspec 文件中指定为 4.6.0,但即使 4.6.18 可用,它也会在新项目上安装 4.6.1。
猜你喜欢
  • 1970-01-01
  • 2014-10-13
  • 1970-01-01
  • 2019-11-05
  • 2020-02-02
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多