Я знаю, що можу видалити пакет з консолі 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 }
Зверніть увагу, що якщо у вас є інша проблема, крім залежних пакетів, які перешкоджають видаленню пакета, цей фрагмент буде працювати вічно, доки ви не зупините його вручну.
Я не вірю, що це можливо, тому видаліть ВСІ пакунки відразу. Однак, як ви вже вказали, ви можете видалити пакет, але ви також можете сказати йому, що він повинен встановити залежності, виконавши наступне:
Видалити-пакет OpenIdPortableArea –Видалити залежності
Ось блог Маркуса Гаммарберга, який пояснює це: 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}