Bagaimana cara saya menghapus paket NuGet yang tidak dirujuk oleh proyek apa pun dalam solusi saya?

141

Entah bagaimana selama upgrade ke VS2012 dan .NET 4.5, saya berhasil membuat NuGet bingung. Ada paket yang muncul di manajer paket (dan folder paket) yang tidak dapat saya hapus (saya percaya itu adalah paket ASP.NET NuGet lama yang telah diganti dengan nama paket baru dengan versi baru. Masing-masing hanya memiliki tombol Kelola - tetapi tidak ada tombol uninstall. Dan ketika Anda melihat untuk melihat di mana mereka digunakan, Anda dapat melihat bahwa mereka dirujuk oleh tidak ada proyek solusi? Mereka TIDAK menampilkan Uninstall?

Howard Pinsley
sumber

Jawaban:

108

Anda dapat menggunakan Package Manager Console dengan perintah: Uninstall-Package PackageIduntuk menghapusnya, atau cukup hapus folder paket dari folder 'paket' di bawah folder solusi. Informasi lebih lanjut tentang Package Manager Console dapat Anda temukan di sini: http://docs.nuget.org/docs/reference/package-manager-console-powershell-reference

Pavel Bakshy
sumber
8
Terima kasih, Pavel. Saya merasa Anda hanya bisa menghapus folder. Agak membingungkan karena saya harus secara manual memastikan bahwa tidak ada paket yang direferensikan (sepertinya tidak). Saya masih agak penasaran untuk mengetahui mengapa manajer paket tidak menampilkan tombol Copot-instal (atau hapus).
Howard Pinsley
2
Manajer paket pada tingkat solusi menampilkan semua paket referensi ke proyek dari solusi dan menambahkan semua paket yang ditempatkan di folder paket, tetapi tidak direferensikan. Untuk paket ini tidak ada kemampuan uninstall di UI. Saya setuju bahwa itu adalah hasil dari perilaku yang salah, tetapi dalam hal ini Anda harus memeriksanya secara manual. Dan hapus paket atau instal ulang ini ketika Anda yakin akan membutuhkannya atau tidak.
Pavel Bakshy
1
Dengan hanya menghapus folder dan kembali ke NuGet dan melihat paketnya, entah bagaimana masih ditampilkan sebagai terinstal dengan centang hijau di sampingnya, lebih baik untuk melakukan penghapusan instalasi yang tepat menggunakan konsol.
k80sg
1
@ysrb, ini adalah perintah powershell yang menggunakan kata kerja seperti get-user atau remove-item, contoh Anda adalah kata benda-kata kerja
Nick Young
1
@ysrb Seperti yang dikatakan Nick Young, dan selain itu, itu akan menjadi pujian yang menghebohkan Install-Package.
ProfK
159

Saya telah menemukan solusi untuk ini.

  1. Aktifkan pengembalian paket dan pemeriksaan otomatis (Opsi / Pengelola Paket / Umum)
  2. Hapus seluruh isi folder paket (ke Keranjang Sampah jika Anda gugup!)
  3. Kelola Paket Nuget Untuk Solusi
  4. Klik tombol restore.

NuGet hanya akan mengembalikan paket yang digunakan dalam solusi Anda. Anda berakhir dengan paket yang bagus dan efisien.

James L.
sumber
1
Bukankah ini tidak akan menghapus paket dari packages.configdan tidak menghapus referensi dari proyek?
CodeCaster
1
@CodeCaster sulit untuk menguraikan negatif ganda Anda. Tidak ada yang akan dihapus dari konfigurasi dan referensi. Idenya di sini adalah untuk menghapus paket-paket NuGet yang tidak lagi dirujuk
James L
1
Jawaban yang sangat bagus! Jika Anda menggunakan TFS, Anda harus menghapus semua konten di dalam ./packages di sumber countrol explorer terlebih dahulu sehingga klien lain seperti mesin build akan menghapus item yang berlebihan juga.
Alexander Schmidt
4
@ sprinter252, jika Anda menggunakan paket restore, Anda tidak seharusnya memeriksa paket-paket ke dalam kontrol sumber. Itulah salah satu manfaat utama menggunakan paket restore. Sebagai bagian dari konversi ke pemulihan paket, aturan 'abaikan' harus ditempatkan pada folder paket.
Carl Bussema
@CarlBussema Anda benar. Karena versi NuGet baru ini tidak begitu penting karena Nuget tidak akan menambahkan binari ke dalam subfolder. Jadi Anda hanya mendapatkan struktur folder. Komentar saya terkait dengan perilaku default TFS (paket-folder termasuk). Di TFS Anywhere diabaikan sering diabaikan ;-). Penting untuk proyek campuran dengan Xamarin.
Alexander Schmidt
17

Pertama buka Konsol Manajer Paket. Kemudian pilih proyek Anda dari daftar dropdown. Dan jalankan perintah berikut untuk menghapus paket nuget.

Get-Package

untuk mendapatkan semua paket yang telah Anda instal.

lalu

Uninstall-Package PagedList.Mvc

--- untuk menghapus paket yang bernama PagedList.MVC

Pesan

PM> Uninstall-Package PagedList.Mvc
Successfully removed 'PagedList.Mvc 4.5.0.0' from MCEMRBPP.PIR.
Abdus Salam Azad
sumber
Jawaban ini sangat cocok untuk saya. Situasi saya adalah bahwa paket hanya muncul di bawah tab Pembaruan dialog ... dan ketika saya menekan Perbarui tidak ada proyek yang menginstal paket - jadi tidak ada cara untuk memperbaruinya atau menghapusnya.
azarc3
8

Jika Anda ingin menghapus / menghapus paket Nuget yang diterapkan ke beberapa proyek dalam solusi Anda, pergi ke:

  1. Alat-> Pengelola Paket Nuget -> Kelola Paket Nuget untuk Solusi

  2. Di kolom kiri di mana 'Paket terinstal' pilih 'Semua', sehingga Anda akan melihat daftar paket yang diinstal dan tombol Kelola di antaranya.

  3. Pilih tombol Kelola dan Anda akan mendapatkan pop out, hapus centang pada kotak di seluruh nama proyek dan Oke

Sisa Manajer Paket pekerjaan akan melakukannya untuk Anda.


sumber
1
Ini jelas jawaban yang saya cari, terima kasih!
Sal
3

Jika Anda telah menghapus paket menggunakan utilitas Uninstall-Package dan menghapus paket yang diinginkan dari direktori paket di bawah solusi (dan Anda masih mendapatkan kesalahan), cukup buka file * .csproj dalam editor kode dan hapus tag secara manual. Seperti misalnya, saya ingin menyingkirkan paket Nuget Xamarin.Forms.Alias dan saya menghapus baris ini dari file * .csproj.

Menghapus paket nuget dari skrip msbuild

Dan akhirnya, jangan lupa memuat ulang proyek Anda setelah diminta di Visual Studio (setelah mengubah file proyek). Saya mencobanya di Visual Studio 2015, tetapi harus bekerja pada Visual Studio 2010 dan seterusnya.

Semoga ini membantu.

AB
sumber
2

Alternatifnya, instal paket yang tidak digunakan yang ingin Anda hapus dalam proyek solusi Anda, setelah itu, hapus instalannya dan Nuget akan menghapusnya juga.

Sebuah uninstaller yang tepat diperlukan di sini.

D.Rosado
sumber
Apakah ada cara untuk menghapusnya dengan benar tanpa menginstal ulang?
Knox
2

Solusi 1

Gunakan pipeline powershell untuk mendapatkan paket dan hapus dalam satu pernyataan seperti ini

Get-Package | Uninstall-Package

Solusi 2

jika Anda ingin menghapus paket yang dipilih ikuti langkah-langkah ini

  1. Gunakan GetPackagesuntuk mendapatkan daftar paket
  2. Unduh perangkat lunak teks gesit
  3. Salin output dari GetPackagesdalam NimbleText (Untuk setiap baris di jendela daftar)
  4. Atur Pemisah Kolom ke (jika diperlukan
  5. Ketik Uninstall-Package $0(Pengganti menggunakan jendela pola)
  6. Salin hasil dan tempel di Paket Kelola Konsol

Itu semua orang.

irfandar
sumber
1

Satu paket NuGet dapat merujuk paket NuGet lainnya. Jadi, harap berhati-hati tentang ketergantungan antar paket. Saya baru saja mencopot paket Google Map dan selanjutnya mencopot paket-paket dasar seperti Newtonsoft, Entity Framework, dll.

Jadi, secara manual menghapus paket tertentu dari folder paket akan lebih aman.

Aki
sumber
1

Dari jendela konsol Package Manager, seringkali perintah apa pun yang Anda gunakan untuk menginstal sebuah paket dapat digunakan untuk menghapus instalasi paket itu. Cukup ganti perintah INSTALL dengan UNINSTALL .

Misalnya, untuk menginstal PowerTCPTelnet, perintahnya adalah:

Install-Package PowerTCPTelnet -Version 4.4.9

Untuk menghapus instalasi yang sama, perintahnya adalah:

Uninstall-Package PowerTCPTelnet -Version 4.4.9

Jazimov
sumber
1

VS2019> Peralatan> Opsi> Manajer Paket Nuget> Umum> Klik "Hapus Semua Cache Nuger (s)"

harris
sumber
-2

Cara lain, dan yang paling sederhana bagi saya adalah:

  1. Pergi ke Soution Anda dan kemudian klik kanan pada ini.

  2. Pilih opsi "Paket NUgets Terkelola untuk Solusi". Itu membuka jendela Popup, di klik pada tombol "Pengaturan". Ini akan membuka jendela sembulan lainnya dan kemudian mencari: "Package Manager".

  3. Di dalam opsi "Pengelola Paket" Anda memiliki dua opsi lagi (I. Umum II. Sumber Paket) Pada setiap opsi hapus centang semua kotak centang.

Langkah-langkah ini menonaktifkan NuGet dari proyek Anda.

Saya harap benar-benar membantu Anda.

amedriveroperez
sumber
-2

Jika Anda ingin menggunakan opsi Visual Studio, silakan lihat tautan di bawah ini

http://spvenky.wordpress.com/2014/08/10/how-to-remove-nuget-packages-from-existing-visual-studio-solution/

Langkah 1: Di Visual Studio, pergi ke Tools / Pengelola Paket NuGet / Kelola Paket NuGet untuk Solusi ...

Langkah 2: Hapus centang proyek Anda dari solusi saat ini

Langkah 3: Batalkan pilihan proyek dan tekan OK

pengguna1214835
sumber
2
Lebih baik menuliskan jawabannya di StackOverflow daripada hanya memposting tautan karena tautan tersebut dapat kedaluwarsa di masa mendatang.
Amadeus Sánchez