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

90

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

Дгорти
источник

Ответы:

132

Чтобы получить все пакеты из всех проектов в решении, используйте Get-Package. Чтобы получить все пакеты из определенного проекта, используйте Get-Package -ProjectName "YourProjectName".


Удалите все пакеты из всех проектов в решении

Будьте осторожны: это приведет к удалению ВСЕХ пакетов в решении . Если -Forceиспользуется параметр, пакеты удаляются, даже если существуют зависимости.

Get-Package | Uninstall-Package -RemoveDependencies -Force


Удалить все пакеты из определенного проекта в решении

Будьте осторожны: это приведет к удалению ВСЕХ пакетов в проекте . Если -Forceиспользуется параметр, пакеты удаляются, даже если существуют зависимости.

Get-Package -ProjectName "YourProjectName" | 
Uninstall-Package -ProjectName "YourProjectName" -RemoveDependencies -Force
Норман
источник
27
Рекомендую в конце добавить параметр -Force. Без него я не могу удалить все свои зависимости на основе зависимостей с другими пакетами NuGet.
Шон Стэйнс,
Это настоящий ответ. В сочетании с предложением Шона использовать -force. Это сработало для меня.
Spikee
86

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

получить пакет | удалить пакет -removedependencies

Владимир Залманек
источник
14
Чтобы не застревать в сложном графе зависимостей, используйте -Forceпереключатель.
Алиреза
12
ВНИМАНИЕ: эта рекомендация удалит все пакеты во всем РЕШЕНИИ.
Джейкоб
31

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

get-package | uninstall-package -removedependencies -force
АГА
источник
15

Если вы хотите удалить каждый пакет 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} }
Михал Стейн
источник
4
Отличный ответ. Сценарий для одного проекта:$packages = Get-Package -ProjectName MyProjectName; foreach($package in $packages){ Uninstall-Package -ProjectName MyProjectName -Id $package.Id -Force}
Mohsen Afshin
10

Использование параметра -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 }

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

Натан
источник
3

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

Uninstall-Package OpenIdPortableArea –RemoveDependencies

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

ссуд. бургер
источник
3
«Удалить зависимости» работает, когда 1 пакет зависит от многих других. Это не работает, когда N пакетов зависят от основного (например, Boost). Вам нужно удалить пакеты NuGet Boost вручную один за другим, что очень сложно.
Quant_dev
1

Пустышка старой школы для цикла:

$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++
    }
}
Теоман Шипахи
источник
1

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

$projectName = "MyProjectName"; $packages = Get-Package -ProjectName $projectName; foreach($package in $packages){ Uninstall-Package -ProjectName $projectName -Id $package.Id -Force}
Влад Сечин
источник
0

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

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

Мариуш
источник