列出NuGet Package Manager控制台中特定软件包的所有可用版本

Aar*_*son 51 powershell nuget

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

我尝试了以下内容,但它只返回一个版本的NUnit以及许多其他(非)相关的包,每个包只有一个版本.

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

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

我的理解是-AllVersions交换机应该撤回每个匹配包的每个版本.

我似乎无法弄清楚的是:

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

Ale*_*ion 60

您的源解析为Feed的版本1,似乎与-AllVersions不兼容(我提交了一个问题:https://github.com/NuGet/NuGetGallery/issues/563)

使用V2 feed对我有用:

get-package -ListAvailable -AllVersions -filter nunit -source https://nuget.org/api/v2/
Run Code Online (Sandbox Code Playgroud)

但请注意,-filter不适用于特定包,但更像是搜索词.

作为一种解决方法,我使用tab autocomplete来获取特定包的版本列表:

install-package -source https://nuget.org/api/v2/ -id nunit -version <tab>
Run Code Online (Sandbox Code Playgroud)

  • 完善!我不知道标签自动完成.这比运行所有这些命令简单得多.非常感谢.并感谢您提出这个问题. (5认同)
  • 这并不完美,我们无法看到列出的所有版本.在我的情况下,如果包有超过4个版本,只显示前4个版本,而剩下的所有版本都被截断(替换为`...`).它看起来很漂亮,有3列,但它不能在Versions列中显示所有版本.我不明白为什么这是可以接受的.因此,如果您想查看所有可用版本,只需使用Nuget包管理器(UI)而不是Nuget Package Console(在这种情况下至少在目前它变得无用). (5认同)

Stu*_*tLC 13

从版本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认同)

小智 6

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

Find-Package -AllVersions -source https://nuget.org/api/v2/ Newtonsoft.Json -ExactMatch | foreach { $_.Versions } | Select-Object Version
Run Code Online (Sandbox Code Playgroud)

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

它的工作原理是首先获取单个包的所有版本(通过-ExactMatch)。这将返回一个具有Versions属性的包对象,它是一个版本对象数组。所述的foreach在所有这些迭代和选择-对象确保每个版本对象是作为一个单一的输出线(通过仅选择其主要属性)。