Список всех доступных версий определенного пакета в консоли NuGet Package Manager
Что команда NuGet PowerShell вернет список всех версий определенного пакета?
Я пробовал следующее, но он возвращает только одну версию NUnit вместе с рядом других (un) пакетов, каждая из которых имеет только одну версию.
Get-Package -Source https://go.microsoft.com/fwlink/?LinkID=206669 -ListAvailable -Filter NUnit -AllVersions
Примечание. Я указываю исходный URI, потому что у нас есть собственный внутренний источник пакета в качестве нашего удаленного по умолчанию.
Я понимаю, что переключатель -AllVersions
должен отбрасывать каждую версию каждого соответствующего пакета.
Я не могу понять, что:
- Я делаю это неправильно?
- Если нет, могут ли разработчики проектов (или кто-то еще) удалить старые версии из источника пакета?
- Если да, то почему?
Ответы
Ответ 1
Начиная с версии 3.x, get-package -ListAvailable -AllVersions
все равно будет работать, но выдает следующее предупреждение о неминуемом устаревании:
Эта комбинация команд/параметров устарела и будет удалена в следующей версии. Пожалуйста, рассмотрите возможность использования новой команды, которая его заменяет: "Найти-Пакет [-Id] -AllVersions".
Кроме того, Find-Package
поддерживает переключатель -ExactMatch
, который позволит избежать проблем с подстановочными знаками, которые -Filter
имеет:
Find-Package NUnit -AllVersions -ExactMatch -Source https://api.nuget.org/v3/index.json
Ответ 2
Ваш источник разрешен до версии 1 канала, которая, похоже, не работает с -AllVersions (я подал проблему: 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>
Ответ 3
Чтобы расширить уже предоставленные решения и ответить на дополнительные вопросы King King и 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 гарантирует, что каждый объект версии выводится в виде одной строки (путем выбора только его основного свойства).