Saya mencoba membangun solusi dengan packages
konten yang hilang (kecuali repositories.config
di dalam) dengan MSBuild 12.0. Saya mengharapkannya untuk secara otomatis mengembalikan semua paket yang hilang sebelum membangun tetapi ini tidak terjadi - MsBuild melaporkan banyak kesalahan:
"Apakah Anda kehilangan petunjuk penggunaan atau referensi perakitan?"
NuGet Manager 2.7 (Saya melihat ini di Visual Studio 2013 tentang kotak). Saya bahkan mencoba untuk memberikan EnableNuGetPackageRestore=true
parameter - tidak berhasil. Apa yang saya lewatkan?
Jawaban:
DIPERBARUI dengan dokumentasi resmi NuGet terbaru pada v3.3.0
Pendekatan Pemulihan Paket
sumber
Jika Anda menggunakan Visual Studio 2017 atau yang lebih baru yang dikirimkan dengan MSBuild 15 atau yang lebih baru, dan file .csproj Anda dalam format baru
PackageReference
, metode yang paling sederhana adalah menggunakanRestore
target MSBuild baru .Tidak ada yang benar-benar menjawab pertanyaan awal, yaitu "bagaimana cara agar paket NuGet dipulihkan otomatis saat membangun dari baris perintah dengan MSBuild?" Jawabannya adalah: kecuali Anda menggunakan opsi "Enable NuGet package restore" (yang sekarang sudah tidak digunakan lagi sesuai referensi ini ), Anda tidak bisa (tetapi lihat di bawah). Jika Anda mencoba melakukan, misalnya, pembuatan otomatis pada server CI, ini menyebalkan.
Namun, ada cara yang tidak pasti untuk mendapatkan perilaku yang diinginkan:
nuget restore
yang akan mengunduh otomatis semua paket yang hilang.msbuild
untuk membangun solusi Anda.Selain itu: meskipun cara baru dan yang disarankan untuk melakukan pemulihan paket otomatis melibatkan lebih sedikit kekacauan dalam kontrol versi Anda, itu juga membuat pemulihan paket baris perintah tidak mungkin kecuali Anda melompat melalui lingkaran ekstra untuk mengunduh dan menjalankan
nuget.exe
. Kemajuan?sumber
nuget.exe
ke / trunk / ext). Satu langkah maju - dua langkah mundur :(Nuget's Automatic Package Restore adalah fitur dari Visual Studio (mulai tahun 2013), bukan MSBuild. Anda harus menjalankannya
nuget.exe restore
jika ingin memulihkan paket dari baris perintah.Anda juga dapat menggunakan fitur Aktifkan Pemulihan Paket Nuget, tetapi ini tidak lagi direkomendasikan oleh orang-orang nuget karena ini membuat perubahan yang mengganggu pada file proyek dan dapat menyebabkan masalah jika Anda membangun proyek tersebut di solusi lain.
sumber
Saya butuh waktu untuk memikirkan keseluruhan gambar dan saya ingin berbagi di sini.
Visual Studio memiliki dua pendekatan untuk menggunakan pemulihan paket: Pemulihan paket otomatis dan pemulihan paket terintegrasi MSBuild. 'Pemulihan Paket Terpadu MSBuild' mengembalikan paket SELAMA proses pembuatan yang mungkin menyebabkan masalah dalam beberapa skenario. 'Pemulihan Paket Otomatis' adalah pendekatan yang direkomendasikan oleh tim NuGet.
Ada beberapa langkah untuk membuat 'Pemulihan Paket Otomatis' berfungsi:
Di Visual Studio, Tools -> Extensions and Updates, Upgrade NuGet jika ada versi yang lebih baru (Versi 2.7 atau yang lebih baru)
Jika Anda menggunakan TFS, di folder .nuget solusi Anda, hapus file NuGet.exe dan NuGet.targes. Kemudian edit NuGet.Config untuk tidak memeriksa paket NuGet:
Jika Anda memeriksa folder paket solusi ke TFS sebelumnya, hapus folder tersebut dan periksa di penghapusan penghapusan folder paket.
Jika Anda tidak menggunakan TFS, hapus folder .nuget.
Di setiap file proyek (.csproj atau .vbproj) dalam solusi Anda, hapus baris yang mereferensikan file NuGet.t target. Referensi tersebut terlihat seperti ini:
Hapus baris ini di setiap file proyek dalam solusi Anda.
Dalam menu Visual Studio, baik melalui
Tools -> Options -> Package Manager -> General atau Tools -> NuGet Package Manager -> Package Manager Settings
harap aktifkan dua opsi berikut 1) 'Izinkan NuGet untuk mengunduh paket yang hilang' 2) 'Secara otomatis memeriksa paket yang hilang selama pembuatan di Visual Studio'
Uji konfigurasi pemulihan paket Anda dengan langkah-langkah berikut
sumber
MSBuild 15 memiliki opsi / t: restore yang melakukan ini. itu datang dengan Visual Studio 2017.
Jika ingin menggunakan ini, Anda juga harus menggunakan yang baru PackageReference , yang berarti mengganti
packages.config
file dengan elemen seperti ini (lakukan ini di * .csproj):Ada migrasi otomatis ke format ini jika Anda mengklik kanan pada 'Referensi' (ini mungkin tidak muncul jika Anda baru saja membuka studio visual, membangun kembali atau membuka jendela 'Kelola paket NuGet untuk solusi' dan itu akan mulai muncul).
sumber
Ian Kemp punya jawabannya (ada beberapa poin btw ..), ini hanya menambahkan sedikit daging ke salah satu langkahnya.
Alasan saya berakhir di sini adalah karena mesin dev sedang membangun dengan baik, tetapi server build tidak menarik paket yang diperlukan (folder paket kosong) dan oleh karena itu build gagal. Namun, masuk ke server build dan membuat solusi secara manual berhasil.
Untuk memenuhi langkah kedua dari Ians 3 point (menjalankan nuget restore ), Anda dapat membuat target MSBuild yang menjalankan perintah exec untuk menjalankan perintah nuget restore, seperti di bawah ini (dalam hal ini nuget.exe ada di folder .nuget, daripada di jalur), yang kemudian dapat dijalankan dalam langkah pembuatan TeamCity (CI lain tersedia ...) segera sebelum membuat solusi
Sebagai catatan, saya sudah mencoba jenis runner "nuget installer" tetapi langkah ini tergantung pada proyek web (bekerja untuk proyek DLL dan Windows)
sumber
Perhatikan bahwa jika Anda menggunakan TeamCity sebagai server build, Anda mendapatkan langkah "Pemasang NuGet" yang dapat Anda gunakan untuk memulihkan semua paket sebelum langkah pembuatan.
sumber
Ada paket.config file dengan proyek, itu berisi detail paket.
Juga ada folder .nuget yang berisi NuGet.exe dan NuGet.t target . jika salah satu dari file hilang itu tidak akan mengembalikan paket yang hilang dan menyebabkan "apakah Anda kehilangan petunjuk penggunaan atau referensi perakitan?" kesalahan
sumber
.nuget
folder dan tidak pernah ada. Semuapackages.config
file dalam folder proyek ada di tempatnya.Kadang-kadang hal ini terjadi ketika Anda memiliki folder paket yang Anda coba pulihkan di dalam folder "paket" (yaitu "Paket / EntityFramework.6.0.0 /" ) tetapi "DLL" tidak ada di dalamnya (sebagian besar kontrol versi sistem secara otomatis mengabaikan file ".dll"). Ini terjadi karena sebelum NuGet mencoba mengembalikan setiap paket, ia memeriksa apakah foldernya sudah ada, jadi jika ada, NuGet mengasumsikan bahwa "dll" ada di dalamnya. Jadi jika ini adalah masalah Anda, hapus saja folder yang NuGet akan pulihkan dengan benar.
sumber
Saya memiliki masalah dengan paket nuget yang tidak disertakan dalam skrip nightly build yang membangun file sln menggunakan devenv.exe.
Saya mengikuti saran dari Microsoft , dan langkah kuncinya adalah memperbarui konfigurasi NuGet
%AppData%/NuGet
sehingga berisi: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 menggunakan msbuild.exe. Dalam hal ini, saya mengunduh nuget.exe dan tetap di jalur.
Selama setiap proses pembuatan sebelum menjalankan msbuild.exe. Ini akan mengeksekusi -> nuget.exe mengembalikan NAME_OF_SLN_File (jika hanya ada satu file .SLN maka Anda dapat mengabaikan parameter itu)
sumber
Anda juga bisa menggunakan
untuk memulihkan paket NuGet di konsol manajemen paket di Visual Studio.
sumber