Я знаю, что могу удалить пакет из консоли PM. У меня возникли проблемы с зависимостями в другом проекте, и я хочу начать сначала, и мне нужно удалить все пакеты одним махом. Есть ли способ?
Как удалить *все* пакеты nuget из решения в Visual Studio
Ответы (9)
Чтобы получить все пакеты из всех проектов в решении, используйте Get-Package
. Чтобы получить все пакеты из определенного проекта, используйте Get-Package -ProjectName "YourProjectName"
.
Удалить все пакеты из всех проектов в решении
Будьте осторожны: это удалит ВСЕ пакеты в решении. Если используется параметр
-Force
, пакеты удаляются, даже если существуют зависимости.
Get-Package | Uninstall-Package -RemoveDependencies -Force
Удалить все пакеты из определенного проекта в рамках решения
Будьте осторожны: это удалит ВСЕ пакеты в проекте. Если используется параметр
-Force
, пакеты удаляются, даже если существуют зависимости.
Get-Package -ProjectName "YourProjectName" |
Uninstall-Package -ProjectName "YourProjectName" -RemoveDependencies -Force
-force
. Это сработало для меня.
- person Spikee; 26.11.2018
В консоли диспетчера пакетов просто введите:
получить-пакет | удалить-пакет-удалить зависимости
-Force
.
- person Alireza; 06.04.2017
попробуй это:
get-package | uninstall-package -removedependencies -force
Если вы хотите удалить каждый пакет NuGet из каждого проекта в решении, используйте это в консоли диспетчера пакетов NuGet:
foreach($project in $projects){ $packages = Get-Package -ProjectName $project.Name; foreach($package in $packages){ Uninstall-Package -ProjectName $project.Name -Id $package.Id -Force} }
$packages = Get-Package -ProjectName MyProjectName; foreach($package in $packages){ Uninstall-Package -ProjectName MyProjectName -Id $package.Id -Force}
- person Mohsen Afshin; 03.12.2016
Использование параметра -Force в моем случае оставило модификации файлов проекта и ссылки на некоторые двоичные файлы, которые должны были быть удалены при обычном удалении пакетов.
Вот наивный метод удаления всех пакетов из определенных проектов без использования параметра -Force. По сути, он пытается удалить пакеты снова и снова, пока не останется пакетов, поэтому вы увидите некоторые ошибки с упоминанием зависимых пакетов (если они у вас есть), но они будут появляться все реже и реже по мере удаления конечных пакетов с каждой итерацией.
Также стоит упомянуть, что я тестировал только следующие фрагменты PowerShell в консоли PackageManager. («Инструменты > Диспетчер пакетов NuGet > Консоль диспетчера пакетов»)
Удалить все пакеты из всех проектов в решении
while((Get-Project -All | Get-Package).Length -gt 0) { Get-Project -All | Get-Package | Uninstall-Package }
Удалять только проекты, содержащие слово "WildCardSearch"
while((Get-Project -All | Where-Object ProjectName -like '*WildCardSearch*' | Get-Package).Length -gt 0) { Get-Project -All | Where-Object ProjectName -like '*WildCardSearch*' | Get-Package | Uninstall-Package }
Обратите внимание, что если у вас есть другая проблема, помимо зависимых пакетов, препятствующих удалению пакета, этот фрагмент будет работать вечно, пока вы не остановите его вручную.
Я не верю, что это возможно, поэтому удалите ВСЕ пакеты сразу. Однако, как вы уже указали, вы можете удалить пакет, но вы также можете указать ему удалить его зависимости, выполнив следующие действия:
Uninstall-Package OpenIdPortableArea — RemoveDependencies
Вот блог Маркуса Хаммарберга, объясняющий это: http://www.marcusoft.net/2011/02/nuget-uninstall-remove-dependencies.html
Обновлен скрипт для удаления всех пакетов nuget для одного проекта в решении VS:
$projectName = "MyProjectName"; $packages = Get-Package -ProjectName $projectName; foreach($package in $packages){ Uninstall-Package -ProjectName $projectName -Id $package.Id -Force}
Автоматическое восстановление (удаление и установка без обновления до последней версии) пакетов с помощью консоли диспетчера пакетов:
Обновление-Пакет-Переустановка
... или только для конкретного проекта:
Update-Package-Reinstall-Project ProjectName
Пустышка старой школы for loop:
$packages = get-package
$packageId = "Apache.NMS.ActiveMQ"
$counter = 1
foreach($package in $packages){
if($package.Id -eq $packageId)
{
Write-Host "`n$counter-Deleting Package:`n"
$package
Uninstall-Package -Id $packageId -ProjectName $package.ProjectName -RemoveDependencies
Write-Host "`n============================================`n"
$counter++
}
}