Bagaimana cara saya membongkar * semua * paket nuget dari solusi di Visual Studio .NET

90

Saya tahu saya dapat menghapus paket dari konsol PM. Saya mengalami beberapa masalah ketergantungan dengan proyek lain dan saya ingin memulai kembali, dan saya perlu menghapus semua paket dalam satu kesempatan. Apakah ada jalan

dgorti
sumber

Jawaban:

132

Untuk mendapatkan semua paket dari semua proyek dalam penggunaan solusi Get-Package. Untuk mendapatkan semua paket dari penggunaan proyek tertentu Get-Package -ProjectName "YourProjectName".


Hapus semua paket dari semua proyek dalam solusi

Hati-hati: Ini akan menghapus SEMUA paket dalam solusi . Jika -Forceparameter digunakan, paket akan dihapus meskipun dependensi ada.

Get-Package | Uninstall-Package -RemoveDependencies -Force


Hapus semua paket dari proyek tertentu dalam sebuah solusi

Hati-hati: Ini akan menghapus SEMUA paket dalam proyek . Jika -Forceparameter digunakan, paket akan dihapus meskipun dependensi ada.

Get-Package -ProjectName "YourProjectName" | 
Uninstall-Package -ProjectName "YourProjectName" -RemoveDependencies -Force
Norman
sumber
27
Saya sarankan untuk menambahkan parameter -Force di akhir. Tanpanya, saya tidak dapat menghapus semua dependensi saya berdasarkan dependensi dengan paket NuGet lainnya.
Sean Stayns
Inilah jawaban sebenarnya. Dikombinasikan dengan saran Sean untuk digunakan -force. Ini berhasil untuk saya.
Spikee
86

Di Package Manager Console cukup ketik:

dapatkan-paket | uninstall-package -removedependencies

Vladimir Zalmanek
sumber
14
Agar tidak terjebak dalam grafik ketergantungan yang kompleks, gunakan -Forcesakelar.
Alireza
12
PERINGATAN: Perintah ini akan menghapus semua paket dalam SOLUSI secara keseluruhan.
Yakub
31

coba ini:

get-package | uninstall-package -removedependencies -force
AHA
sumber
15

Jika Anda ingin menghapus setiap Paket NuGet dari setiap Proyek dalam sebuah Solusi, gunakan ini di Konsol Pengelola Paket NuGet:

foreach($project in $projects){ $packages = Get-Package -ProjectName $project.Name; foreach($package in $packages){ Uninstall-Package -ProjectName $project.Name -Id $package.Id -Force} }
Michal Steyn
sumber
4
Jawaban yang bagus. Naskah untuk satu proyek:$packages = Get-Package -ProjectName MyProjectName; foreach($package in $packages){ Uninstall-Package -ProjectName MyProjectName -Id $package.Id -Force}
Mohsen Afshin
10

Menggunakan parameter -Force dalam kasus saya meninggalkan modifikasi file proyek dan referensi ke beberapa binari yang seharusnya telah dihapus ketika biasanya menghapus paket.

Berikut adalah metode naif untuk menghapus semua paket dari proyek tertentu tanpa menggunakan parameter -Force. Secara efektif ia mencoba untuk menghapus paket-paket itu berulang-ulang sampai tidak ada paket yang tersisa, jadi Anda akan melihat beberapa kesalahan yang menyebutkan paket-paket dependen (jika Anda memilikinya) tetapi mereka akan semakin jarang muncul saat paket daun dihapus setiap iterasi.

Juga perlu disebutkan, saya hanya menguji cuplikan PowerShell berikut di konsol PackageManager. ("Tools> NuGet Package Manager> Package Manager Console")

Hapus semua paket dari semua proyek dalam sebuah solusi

while((Get-Project -All | Get-Package).Length -gt 0) { Get-Project -All | Get-Package | Uninstall-Package }

Hanya hapus Proyek yang mengandung kata " 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 }

Perhatikan bahwa jika Anda memiliki masalah lain selain paket dependen yang mencegah penghapusan paket, cuplikan ini akan berjalan selamanya hingga Anda menghentikannya secara manual.

Nathan
sumber
3

Saya tidak percaya ini mungkin jadi hapus instalasi SEMUA paket sekaligus. Namun, seperti yang telah Anda tunjukkan, Anda dapat menghapus instalasi sebuah paket, tetapi Anda juga dapat memberitahukannya untuk menghapus dependensinya dengan melakukan hal berikut:

Uninstall-Package OpenIdPortableArea –RemoveDependencies

Berikut adalah blog oleh Marcus Hammarberg yang menjelaskan hal ini: http://www.marcusoft.net/2011/02/nuget-uninstall-remove-dependencies.html

loan.burger
sumber
3
"Hapus ketergantungan" berfungsi ketika 1 paket bergantung pada banyak paket lainnya. Ini tidak bekerja ketika paket N bergantung pada inti (mis. Boost). Anda perlu menghapus paket Boost NuGet secara manual satu per satu, yang merepotkan.
quant_dev
1

Dummy old-school 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++
    }
}
Teoman shipahi
sumber
1

Memperbarui skrip untuk menghapus semua paket nuget untuk satu proyek dalam solusi VS:

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

Memulihkan otomatis (mencopot dan memasang) paket dalam proyek menggunakan Package Manager Console:

Perbarui-Paket -Instal Ulang

Mariusz
sumber