首页 > 解决方案 > NuGet 包管理器不安装最高依赖版本的包?

问题描述

这一定是我正在使用的 NuGet 包管理器(版本 4.6.0)的错误。我使用了该选项DependencyVersion highest,但它总是为依赖项选择最低版本。

像这样(我正在尝试Serilog.AspNetCore使用 2.2.0 的依赖项进行安装 - 总是选择最新的但 2.0.0)。

install-package Serilog.AspNetCore -DependencyVersion highest

它选择的一个依赖项是,Microsoft.AspNetCore.Http.Abstractions 2.0.0但我希望它会选择Microsoft.AspNetCore.Http.Abstractions 2.2.0. 这很重要,因为在我的项目中2.2.0需要版本,Serilog 应该通过安装正确版本的依赖项来适应该要求。但是在这里我无法帮助它理解我想要什么。

此外,NuGet 包管理器的 UI 中也不会显示安装和更新选项DependencyVersion(使用 UI 安装包时也可以在那里选择)。因此,至少在我正在使用的特定版本的 Nuget 包管理器中,这似乎是一些错误。

我能做些什么来解决这个问题?我可以尝试修复已安装的 nuget 管理器(更新窗口中没有任何更新)。谢谢!

更新

我刚刚尝试了一个传统的 .NET 项目,它可以工作。但是当我的项目以 .NET Core (ASP.NET Core) 为目标时出现的问题?看起来它不支持 .NET Core 项目的该功能?

标签: visual-studio.net-corenuget

解决方案


DependencyVersion switch用于控制 NuGet 查找补丁版本时的行为。它似乎是在 NuGet 2.8 之后引入的,但我们应该知道的一点是该选项仅支持packages.configformat

有两种包管理格式:Projects.configPackageReference

1.对于传统的.net项目:可以使用Packages.configPackageReference管理其nuget包。但默认使用packages.config.

2.对于.net核心项目(使用新的SDK格式项目文件):它使用新PackageReference格式作为其包管理格式。

有关它的更多详细信息,请参阅:项目类型支持

有人在 github 上发布了此功能请求,请在此处查看问题。希望对您有所帮助。

更新:

我希望它选择 Microsoft.AspNetCore.Http.Abstractions 2.2.0

尝试先删除 bin 和 obj 文件夹,

然后进入Tools menu=>Nuget Package Manager=>Package Manager Settings=>Clear All Nuget Caches。(有时候会删除里面的packages文件夹C:\Users\lancel\.nuget\packages,我们需要手动新建packages文件夹)

然后在安装包Microsoft.AspNetCore.Http.Abstractions 2.2.0 package之前单独安装。Serilog.AspNetCore构建应用程序,您可以通过设置CopyLocalLockFileAssemblies检查输出 .dll 。在我的机器中,它成功引用了 Microsoft.AspNetCore.Http.Abstractions.dll 的 2.2.0 版本。希望能帮助到你:)


推荐阅读