Saya punya solusi dengan beberapa proyek di dalamnya. Sebagian besar referensi pihak ketiga tidak ada, namun ada packages.config
file untuk setiap proyek. Bagaimana saya membuat NuGet menginstal / memperbarui semua paket yang dibutuhkan? Apakah ini perlu dilakukan melalui baris perintah untuk setiap proyek?
674
Jawaban:
Anda dapat menggunakan nuget.exe untuk memulihkan paket Anda atau dengan NuGet 2.7, atau diinstal, Anda dapat dengan mudah mengkompilasi solusi Anda di Visual Studio, yang juga akan mengembalikan paket yang hilang.
Untuk NuGet.exe Anda dapat menjalankan perintah berikut untuk setiap proyek.
Atau dengan NuGet 2.7 Anda dapat mengembalikan semua paket dalam solusi menggunakan baris perintah.
Kedua hal ini akan menurunkan paket. Namun file proyek Anda tidak akan diubah ketika menjalankan perintah ini sehingga proyek seharusnya sudah memiliki referensi ke paket NuGet. Jika ini tidak terjadi maka Anda dapat menggunakan Visual Studio untuk menginstal paket.
Dengan NuGet 2.7, dan di atas, Visual Studio akan secara otomatis mengembalikan paket NuGet yang hilang ketika Anda membangun solusi Anda sehingga tidak perlu menggunakan NuGet.exe.
Untuk memperbarui semua paket dalam solusi Anda, pertama kembalikan, dan kemudian Anda dapat menggunakan NuGet.exe untuk memperbarui paket atau dari dalam Visual Studio Anda dapat memperbarui paket dari jendela Package Manager Console, atau akhirnya Anda dapat menggunakan Kelola Dialog paket.
Dari baris perintah, Anda dapat memperbarui paket dalam solusi ke versi terbaru yang tersedia dari nuget.org.
Perhatikan bahwa ini tidak akan menjalankan skrip PowerShell dalam paket NuGet.
Dari dalam Visual Studio Anda dapat menggunakan Konsol Manajer Paket untuk juga memperbarui paket. Ini memiliki manfaat bahwa setiap skrip PowerShell akan dijalankan sebagai bagian dari pembaruan di mana menggunakan NuGet.exe tidak akan menjalankannya. Perintah berikut akan memperbarui semua paket di setiap proyek ke versi terbaru yang tersedia dari nuget.org.
Anda juga dapat membatasi ini pada satu proyek.
Jika Anda ingin menginstal ulang paket ke versi yang sama seperti yang sebelumnya diinstal maka Anda dapat menggunakan
-reinstall
argumen denganUpdate-Package
perintah.Anda juga dapat membatasi ini pada satu proyek.
The
-reinstall
pilihan pertama akan uninstall dan kemudian menginstal paket tersebut kembali lagi ke proyek.Atau, Anda dapat memperbarui paket menggunakan
Manage Packages
dialog.Pembaruan:
-reinstall
sumber
Update-Package -reinstall -Project ProjectName
Instal ulang semua paket dalam SEMUA PROYEK dari solusi saat ini:
Instal ulang semua paket dalam PROYEK SPESIFIK dari solusi saat ini ( Terima kasih atas ketidaksetaraan dan abu999 ):
sumber
Ada cara lain, yang lebih baru dan lebih cepat untuk melakukan ini dari dalam Visual Studio. Periksa pos ini oleh David Ebbo, dan rujuk bagian komentar jika Anda mengalami masalah. Pada dasarnya, Anda melakukan hal berikut ini di Package Manager prompt:
Setelah itu, ketika Anda membangun solusi Anda, paket-paket akan diinstal secara otomatis jika hilang.
Memperbarui:
Fungsi ini dibangun ke dalam Nuget 1.6 dengan integrasi studio visual sehingga Anda bahkan tidak perlu menginstal NuGetPowerTools atau mengetik perintah. Yang harus Anda lakukan adalah
Baca artikel ini untuk lebih jelasnya.
sumber
Berikut solusi lain jika Anda menggunakan proyek situs web, atau tidak ingin mengaktifkan Pemulihan Paket NuGet.
Anda dapat menggunakan konsol manajer paket untuk menghitung semua paket dalam file package.config dan menginstalnya kembali.
sumber
$packages.packages.package | % { Update-Package -reinstall -id $($_.id) }
Update-Package -Reinstall
.Ini adalah contoh terbaik dan termudah yang saya temukan. Ini akan menginstal ulang semua nuget yang terdaftar dalam paket.config dan itu akan mempertahankan versi saat ini. Ganti
YourProjectNameGoesHere
dengan nama proyek.sumber
Dengan rilis NuGet 2.5 terbaru sekarang ada tombol "Perbarui Semua" di manajer paket: http://docs.nuget.org/docs/release-notes/nuget-2.5#Update_All_button_to_allow_updating_all_packages_at_once
sumber
Saya menggunakan visual studio 2015 dan solusi yang diberikan di atas tidak bekerja untuk saya, jadi saya melakukan yang berikut:
Hapus folder paket dari solusi saya dan juga folder bin dan obj dari setiap proyek dalam solusi dan berikan kembali.
Mungkin Anda akan memiliki kesalahan berikutnya:
Untuk mengatasinya: Ubah baris ini di file NuGet.targets Anda dan atur menjadi true:
Referensi: https://stackoverflow.com/a/30918648 dan https://stackoverflow.com/a/20502049
sumber
Jika Anda menginstal Nuget 2.8, centang kotak centang
dalam Visual Studio. Jika dicentang, maka cukup membangun kembali proyek akan mengembalikan semua perpustakaan referensi Anda.
sumber
Allow NuGet to download missing packages
kotak centang juga.Setelah 3 jam pencarian dan penyelidikan.
Saya punya masalah dengan itu karena kami memiliki dua anggota dalam tim (menggunakan kontrol sumber GitHub), karena kami tidak membatasi file untuk paket untuk dikirim ke repositori jarak jauh, salah satu anggota tim mengirim paket ke server dan saya telah menarik perubahan itu ke lokal saya.
Setelah itu saya memiliki masalah yang sama dengan PO, juga saya tidak dapat mempublikasikan proyek API saya ke server.
Di dan saya baru saja digunakan
Update-Package -Reinstall - jalankan perintah ini di Package Manager Console
Perintah ini akan menginstal ulang semua paket Anda yang telah Anda gunakan dalam solusi Anda. (Untuk setiap proyek)
Instal ulang semua paket dalam SEMUA PROYEK dari solusi saat ini:
Update-Package -ProjectName 'NameOfProject' -Reinstall - jalankan perintah ini di Package Manager Console
Perintah ini akan menginstal ulang semua paket Anda yang terkait dengan proyek yang Anda tentukan setelah "-ProjectName". Dan saya pikir ini lebih baik karena saya harus menunggu setengah jam untuk menginstal ulang semua paket dalam solusi.
Terima kasih banyak untuk Rodolpho Brock .
Juga, saya akan merekomendasikan Anda bahwa ketika Anda menarik perubahan dari server jauh, untuk menekan tombol "Kembalikan paket" yang akan ditampilkan oleh Visual studio.
sumber
Saya percaya hal pertama yang perlu Anda lakukan adalah mengaktifkan fitur restore paket . Lihat juga di sini . Ini dilakukan pada tingkat solusi (bukan proyek).
Tapi itu tidak akan membantu Anda - saya mengalami masalah serupa setelah mengaktifkan fitur restore. (VS2013, NuGet 2.8.)
Ternyata saya (tanpa sengaja) melakukan paket-paket ke kontrol sumber ketika saya melakukan proyek - tetapi Visual Studio (dan plugin kontrol sumber) telah membantu mengabaikan binari ketika melakukan check-in.
Masalah muncul ketika saya membuat cabang rilis. Salinan lokal saya dari cabang dev / main / trunk memiliki binari, karena di situlah saya awalnya menginstal / mengunduh paket.
Namun, di cabang rilis baru,
.nupkg
file ada di sana - jadi NuGet tidak berpikir ada sesuatu untuk dipulihkan;Saya menghapus semua folder paket di
$(SolutionDir)/packages
( di bawah cabang rilis) dan kemudian menjalankan pembangunan kembali penuh, dan kali ini build berhasil.... dan tentu saja saya kembali dan menghapus folder paket dari kontrol sumber (di cabang trunk dan rilis). Saya belum jelas (belum) tentang apakah
repositories.config
file tersebut harus dihapus juga.Banyak komponen yang diinstal untuk Anda oleh templat proyek - setidaknya untuk proyek web - adalah paket NuGet. Artinya, masalah ini tidak terbatas pada paket yang Anda tambahkan.
Jadi aktifkan pengembalian paket segera setelah membuat proyek / solusi, dan sebelum Anda melakukan check-in awal, kosongkan
packages
folder (dan pastikan Anda mengkomit.nuget
folder tersebut ke kontrol sumber).Penafian: Saya melihat jawaban lain di sini pada SO yang menunjukkan bahwa membersihkan
packages
folder adalah bagian dari resolusi. Itu menempatkan saya di jalur yang benar, jadi saya ingin memberikan penghargaan kepada penulis, tetapi saya tidak dapat lagi menemukan pertanyaan / jawaban itu. Saya akan memposting hasil edit jika saya tersandung.Saya juga mencatat bahwa
Update-Package -reinstall
akan memodifikasi.sln
dan.csproj
/.vbproj
file. Setidaknya itulah yang dilakukannya dalam kasus saya. IMHO mana yang membuat opsi ini jauh lebih menarik.sumber
Saya mencoba
Update-Package -reinstall
tetapi gagal pada satu paket dan berhenti memproses semua paket proyek yang tersisa dalam solusi saya.Saya berakhir dengan skrip saya yang menyebutkan semua file package.config dan berjalan
Update-Package -Reinstall -ProjectName prj -Id pkg
untuk setiap proyek / paket.Semoga bermanfaat bagi seseorang:
Sunting: Ini adalah kesalahan yang saya miliki: Pembaruan-Paket: Tidak dapat menemukan paket 'EntityFramework.BulkInsert-ef6'. Paket yang ada harus dipulihkan sebelum melakukan instalasi atau pembaruan. Jalankan manual
Update-Package -Reinstall -ProjectName my_prj -Id EntityFramework.BulkInsert-ef6
bekerja dengan sangat baik.sumber
Bagi mereka yang tiba di sini karena build server melakukan pelanggaran ini, Anda dapat membuat target MSBuild menjalankan perintah exec untuk menjalankan perintah nuget restore , seperti di bawah ini (dalam hal ini nuget.exe ada di folder .nuget, daripada di jalan), yang kemudian dapat dijalankan dalam langkah membangun TeamCity segera sebelum membangun solusi
sumber
sekarang Nuget Package Manager Console di Visual Studio 2012 memberi Anda tombol "Kembalikan" secara otomatis segera menemukan paket apa pun tidak diinstal tetapi di sana di package.config. Fitur Luar Biasa!
sumber
Di VS2012 V11, jika saya menggunakan "-Reload" pada akhir baris tidak berfungsi.
Jadi saya hanya menggunakan:
sumber
Saya tahu ini adalah posting lama, tetapi saya pikir ini bisa berguna. Jika Anda perlu mengabaikan paket tertentu selama proses pembaruan (seperti paket apa pun yang memperbarui referensi JavaScript), gunakan skrip PowerShell berikut (pastikan sumber paket Anda disetel ke "Semua" di Package Manager Console):
EDIT 2014-09-25 10:55 EST - Memperbaiki bug dalam skrip
sumber
Tidak tahu sejak kapan, tetapi dalam VS2019 Anda dapat melakukannya dengan cara yang lebih mudah:
sumber
Dalam Visual Studio 2017 - Ketika Anda mengkompilasi menggunakan IDE - Ini akan mengunduh semua paket nuget yang hilang dan menyimpannya di folder "paket".
Tetapi pada kompilasi mesin build dilakukan dengan menggunakan msbuild.exe. Dalam hal ini, saya mengunduh nuget.exe.
Selama setiap proses pembuatan sebelum menjalankan msbuild.exe. Ini akan mengeksekusi -> mengembalikan nuget.exe NAME_OF_SLN_File (jika hanya ada satu file .SLN maka Anda dapat mengabaikan parameter itu).
sumber
MSbuild -t:restore Xxxx.sln