Как удалить *все* пакеты nuget из решения в Visual Studio

Я знаю, что могу удалить пакет из консоли PM. У меня возникли проблемы с зависимостями в другом проекте, и я хочу начать сначала, и мне нужно удалить все пакеты одним махом. Есть ли способ?


person dgorti    schedule 19.02.2015    source источник


Ответы (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
person Norman    schedule 25.05.2016
comment
Я рекомендую добавить параметр -Force в конце. Без него я не могу удалить все свои зависимости на основе зависимостей с другими пакетами NuGet. - person Sean Stayns; 23.04.2017
comment
Это настоящий ответ. В сочетании с предложением Шона использовать -force. Это сработало для меня. - person Spikee; 26.11.2018

В консоли диспетчера пакетов просто введите:

получить-пакет | удалить-пакет-удалить зависимости

person Vladimir Zalmanek    schedule 26.04.2016
comment
Чтобы не застрять в сложном графе зависимостей, используйте переключатель -Force. - person Alireza; 06.04.2017
comment
ВНИМАНИЕ: Эта команда удалит все пакеты во всем РЕШЕНИИ. - person Jacob; 12.08.2017

попробуй это:

get-package | uninstall-package -removedependencies -force
person AHA    schedule 06.05.2017

Если вы хотите удалить каждый пакет 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} }
person Michal Steyn    schedule 16.06.2016
comment
Отличный ответ. Скрипт для одного проекта: $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 }

Обратите внимание, что если у вас есть другая проблема, помимо зависимых пакетов, препятствующих удалению пакета, этот фрагмент будет работать вечно, пока вы не остановите его вручную.

person Nathan    schedule 13.10.2017

Я не верю, что это возможно, поэтому удалите ВСЕ пакеты сразу. Однако, как вы уже указали, вы можете удалить пакет, но вы также можете указать ему удалить его зависимости, выполнив следующие действия:

Uninstall-Package OpenIdPortableArea — RemoveDependencies

Вот блог Маркуса Хаммарберга, объясняющий это: http://www.marcusoft.net/2011/02/nuget-uninstall-remove-dependencies.html

person loan.burger    schedule 19.02.2015
comment
Удаление зависимостей работает, когда один пакет зависит от многих других. Это не работает, когда N пакетов зависят от основного (например, Boost). Вам нужно удалить пакеты NuGet Boost вручную один за другим, что является проблемой. - person quant_dev; 19.12.2015

Обновлен скрипт для удаления всех пакетов nuget для одного проекта в решении VS:

$projectName = "MyProjectName"; $packages = Get-Package -ProjectName $projectName; foreach($package in $packages){ Uninstall-Package -ProjectName $projectName -Id $package.Id -Force}
person Vlad Setchin    schedule 13.11.2019

Автоматическое восстановление (удаление и установка без обновления до последней версии) пакетов с помощью консоли диспетчера пакетов:

Обновление-Пакет-Переустановка

... или только для конкретного проекта:

Update-Package-Reinstall-Project ProjectName

person Mariusz    schedule 12.02.2020

Пустышка старой школы 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++
    }
}
person Teoman shipahi    schedule 16.03.2018