Как удалить * все * пакеты 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
ВНИМАНИЕ: эта рекомендация удалит все пакеты во всем РЕШЕНИИ.
Джейкоб


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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.