【问题标题】:Prevent Nuget from downloading the most updated version of a dependency阻止 Nuget 下载依赖项的最新版本
【发布时间】:2014-09-28 09:27:54
【问题描述】:

我使用 Nuget 下载特定版本的 CouchbaseClient,它是 NoSql 产品的 .Net 客户端。

这个 dll 在 Newton.Json 中有一个依赖,所以这是在使用 Nuget 时发生的:

Install-Package CouchbaseNetClient -Version 1.3.6
Attempting to resolve dependency 'Newtonsoft.Json'.
Installing 'Newtonsoft.Json 6.0.5'.
Successfully installed 'Newtonsoft.Json 6.0.5'.
Installing 'CouchbaseNetClient 1.3.6'.
Successfully installed 'CouchbaseNetClient 1.3.6'.
Adding 'Newtonsoft.Json 6.0.5' to DataAccess.
Successfully added 'Newtonsoft.Json 6.0.5' to DataAccess.
Adding 'CouchbaseNetClient 1.3.6' to DataAccess.
Successfully added 'CouchbaseNetClient 1.3.6' to DataAccess.

问题是,当我运行单元测试时,抛出了一个异常,它正在寻找 Newton.Json 版本 4.5.0。

所以,我需要手动删除 Nuget 为我下载并使用 Nuget Newton.Json 4.5.0 添加的 Newton.Json 6.0.5。

有没有更简单的方法? 我不想每次下载包含依赖项的软件包时都执行此手动过程,这些依赖项不是最新版本。

【问题讨论】:

    标签: .net visual-studio-2010 nuget


    【解决方案1】:

    您的选择是:

    1. 在 app.config 中为 Newtonsoft.Json 添加绑定重定向,以便将 4.5 重定向到 6.0.5。
    2. 在您的 packages.config 中添加 constraint 以限制 Newtonsoft.Json 包版本。
    3. 安装更新的 NuGet 版本(2.5 或更高版本)。
    4. 使用-DependencyVersion parameter 更改Install-Package 的默认行为。
    5. 使用所需的 NuGet 包创建项目模板并重新使用它。

    如果已经安装了 Newtonsoft.Json 4.5.11,那么 CouchbaseNetClient 将不会安装更高版本,除非您尚未安装 Newtonsoft.Json 或者您使用的是旧版本的 NuGet(早于 NuGet 2.5)。

    【讨论】:

    • 我正在使用 Nuget 2.8,我添加包的解决方案是我从头开始创建的新解决方案。因此,如果我理解正确: 1. 我是否必须提前知道我从 Nuget 添加的每个包的依赖项的版本,以防止它添加最新版本? Nuget 怎么不知道想要的依赖版本?
    • 我正在寻找更合适的解决方案的原因是我不想在 packages.config 中手动添加我拥有的每个项目的依赖版本..它通常是人们在大团队可以错过做。我正在寻找一种解决方案,使这个过程尽可能自动化,而不是人们需要记住在每个新项目中手动执行的操作。
    • 1. NuGet 不会知道您的项目对依赖项的要求是什么。默认情况下,它将选择最新的稳定 NuGet 包版本。 Install-Package 确实有一个 -DependencyVersion 参数,可用于更改行为。 2. NuGet 包中的依赖项由清单文件 (.nuspec) 定义。对于 CouchbaseNetClient NuGet 包,它没有指定 Newtonsoft.Json 依赖项的版本,因此默认情况下 NuGet 将采用最新版本。
    • 我会考虑创建一个包含您需要的 NuGet 包的项目模板。
    • 所以您说将 CouchbaseNetClient 添加到 Nuget 的团队忘记在 .nuspec 中添加依赖项,这就是为什么我和所有安装此软件包的用户都需要自己手动完成的原因?
    猜你喜欢
    • 1970-01-01
    • 2020-08-10
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2012-01-03
    • 1970-01-01
    • 2014-10-13
    相关资源
    最近更新 更多