Я знаю, что могу удалить пакет из консоли PM. У меня возникли проблемы с зависимостями с другим проектом, и я хочу начать все сначала, и мне нужно удалить все пакеты одним выстрелом. Есть способ?
Ответы:
Чтобы получить все пакеты из всех проектов в решении, используйте 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
. Это сработало для меня.
Если вы хотите удалить каждый пакет 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}
Использование параметра -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
Пустышка старой школы для цикла:
$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++
}
}
Обновлен скрипт для удаления всех пакетов nuget для одного проекта в решении VS:
$projectName = "MyProjectName"; $packages = Get-Package -ProjectName $projectName; foreach($package in $packages){ Uninstall-Package -ProjectName $projectName -Id $package.Id -Force}