【问题标题】:List all available versions of a specific package in NuGet Package Manager Console在 NuGet 包管理器控制台中列出特定包的所有可用版本
【发布时间】:2020-06-27 00:06:43
【问题描述】:

哪个 NuGet PowerShell 命令将返回特定包的所有版本的列表?

我尝试了以下方法,但它只返回一个版本的 NUnit 以及许多其他(不)相关的包,每个包只有一个版本。

Get-Package -Source https://go.microsoft.com/fwlink/?LinkID=206669 -ListAvailable -Filter NUnit -AllVersions

注意:我指定源 URI,因为我们有自己的内部包源作为我们的默认远程。

我的理解是-AllVersions 开关应该拉回每个匹配包的每个版本。

我似乎无法弄清楚:

  1. 我做错了吗?
  2. 如果不是,项目维护者(或其他人)是否会从包源中删除旧版本?
  3. 如果是,为什么?

【问题讨论】:

  • 你说是你的内部包源,那么如果2)是这样,为什么要在这里问3)?去问问他们!
  • 也许我不清楚:我提供的源 URI 是(显然,请参阅 Alexandre 的回答)nuget v1 包源端点。我们内部的包源上面只有内部开发的包,所以需要提供-Source才能查询官方的NuGet包源。希望有助于澄清。感谢您的评论!

标签: powershell nuget


【解决方案1】:

您的来源解析为似乎不适用于 -AllVersions 的提要版本 1(我提出了问题:https://github.com/NuGet/NuGetGallery/issues/563

使用 V2 提要对我有用:

get-package -ListAvailable -AllVersions -filter nunit -source https://nuget.org/api/v2/

但请注意,-filter 不是针对特定的包,而更像是一个搜索词。

作为一种解决方法,我会使用选项卡自动完成功能来获取特定包的版本列表:

install-package -source https://nuget.org/api/v2/ -id nunit -version <tab>

【讨论】:

  • 完美!我不知道标签自动完成。这比运行所有这些命令要简单得多。非常感谢。并感谢您打开问题。
  • 这并不完美,我们无法看到列出的所有版本。在我的情况下,如果包有超过 4 个版本,则只显示前 4 个,而其余的都被截断(替换为 ...)。它看起来非常漂亮和整洁,有 3 列,但它不能在 Versions 列中显示所有版本。我不明白为什么这是可以接受的。因此,如果您想查看所有可用版本,只需使用 Nuget 包管理器 (UI) 而不是 Nuget 包控制台(至少目前在这种情况下它变得无用)。
  • 感谢分享检查包版本的自动完成提示。该命令行示例指定了 V1 提要(或其他提要),并且在逐字粘贴时对我不起作用。但是,当我将 V2 提要 url 替换为 -source 参数时,它就像一个魅力。我编辑了您的答案,以便自动完成示例引用 V2 提要。
  • 同意 King King,将列表截断为单个单元格是不可用的。有没有办法使用 Find-Package 实际显示版本列表?
【解决方案2】:

从 3.x 版开始,get-package -ListAvailable -AllVersions 仍然有效,但会发出以下关于即将弃用的警告:

此命令/参数组合已被弃用,将在下一版本中删除。请考虑使用替换它的新命令:'Find-Package [-Id] -AllVersions'。

此外,Find-Package 支持-ExactMatch 开关,这将避免-Filter 存在的通配符匹配问题:

Find-Package NUnit -AllVersions -ExactMatch -Source https://api.nuget.org/v3/index.json

【讨论】:

  • 即将弃用?即将拆除?更新时间(带有版本信息和日期)?
  • 值得注意的是,这里引用的Find-Package的版本(带有-ExactMatch开关)并不是通用的PowerShell版本;此行为仅适用于 Visual Studio 中的包管理器控制台。
【解决方案3】:

要扩展已经提供的解决方案并解决后续问题by King Kingand JohnKoz,可以获得特定软件包的完整版本列表,如下所示:

Find-Package -AllVersions -source https://nuget.org/api/v2/ Newtonsoft.Json -ExactMatch | foreach { $_.Versions } | Select-Object Version

Newtonsoft.Json 包就是一个例子。根据需要更换它。

首先获取单个包的所有版本(通过-ExactMatch)。这将返回一个具有 Versions 属性的包对象,该属性是一个版本对象数组。 foreach 遍历所有这些,Select-Object 确保每个版本对象都作为单行输出(仅选择其主要属性)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多