Haruskah folder .nuget ditambahkan ke kontrol versi?


107

Dengan versi NuGet yang lebih baru, Anda dapat mengonfigurasi proyek untuk secara otomatis memulihkan paket NuGet sehingga packagesfolder tersebut tidak perlu disertakan dalam repositori kode sumber. Baik.

Namun, perintah ini menambahkan .nugetfolder baru dan ada biner di sana, NuGet.exe. Ini juga dapat dibuat ulang secara otomatis oleh Visual Studio sehingga rasanya tidak benar untuk menambahkannya ke kontrol versi. Namun, tanpa folder ini Visual Studio bahkan tidak dapat memuat solusi dengan benar.

Bagaimana Anda menghadapi ini? Tambahkan .nuget ke kontrol sumber? Jalankan beberapa skrip baris perintah sebelum membuka solusi?


Ini adalah tautan paling otentik docs.nuget.org/docs/workflows/… dan karena ini adalah utas lama. Saya hanya ingin berbagi informasi di komentar ...
Naveed Butt

Jawaban:


47

Posting ini sudah lama, Anda seharusnya tidak menggunakan pemulihan paket tingkat solusi NuGet lagi. Mulai versi 2.7+, ada opsi di pengaturan NuGet untuk secara otomatis memulihkan paket saat dibangun. Jadi, folder .nuget dapat dihapus dan opsi dihapus dari proyek Anda.

http://docs.nuget.org/docs/reference/package-restore

PEMBARUAN: Dengan dirilisnya NuGet 4.x dan .NET Standard 2.0, saat Anda menggunakan format csproj baru, Anda sekarang dapat menggunakan referensi paket, ironisnya memperkenalkan kembali ketergantungan pada msbuild untuk memulihkan paket, tetapi sekarang paket adalah warga kelas pertama msbuild . Tautan di atas juga menyebutkan PackageReference, tetapi pengumuman berikut merinci lebih baik:

https://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html

Dan pengumuman NuGet 4.x RTM, yang ironisnya tidak begitu berguna:

https://blog.nuget.org/20170308/Announcing-NuGet-4.0-RTM.html

PEMBARUAN 2: Rupanya dengan VS2017 Anda bahkan dapat menggunakan referensi paket dengan proyek csproj klasik, tetapi mereka tidak lagi kompatibel ke belakang, dan ada beberapa masalah dengan memulihkan sub-ketergantungan paket. Saya yakin itu semua akan terselesaikan.



@CAD Bloke, ya itu ada di daftar bacaan di bagian bawah, terima kasih telah mempersempitnya.
Jeremy

Anda dapat dengan mudah mengupdate Nuget di VS menggunakan Tools > Extensions & Updates > Updates.
bercanda

47

Jawaban @Richard Szalay benar - Anda tidak perlu melakukan nuget.exe. Jika karena beberapa alasan Visual Studio tidak secara otomatis mengunduh nuget.exe, pastikan Anda memiliki yang berikut ini disetel ke true di nuget.targetsfile:

<!-- Download NuGet.exe if it does not already exist --> 
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>

Tutup solusi VS, buka kembali dan bangun. Visual Studio harus mengunduh nuget.exe secara otomatis sekarang.


Ngomong-ngomong, ada yang tahu mengapa ini tidak disetel truesecara default?
ajukraine

2
Ini lebih merupakan masalah privasi. "Tindakan sederhana membuat permintaan melalui Internet dapat mengungkapkan informasi tentang pengguna (misalnya, dari alamat IP pengguna, kami dapat memperkirakan lokasinya)." Lihat artikel Pemulihan dan Persetujuan Paket di blog Nuget
Gan

1
FYI: Jika NuGet.exe tidak ada di folder .nuget, menu konteks Solusi akan menampilkan "Aktifkan Pemulihan Paket NuGet", meskipun Pemulihan Paket NuGet sudah dikonfigurasi. Setelah dibangun, opsi akan hilang.
comecme

Ini harus menjadi jawaban yang diterima, IMO ... Jika NuGet.exe sangat kecil, saya mungkin akan mengatakan tetap menempelkannya di kontrol sumber dan menangani apa pun yang harus Anda lakukan dalam file abaikan Anda. Tapi 1,5 MB, itu cukup besar bagi saya untuk selalu melakukannya dengan cara Gan.
Brian MacKay

Di mana ia mengunduh formulir nuget.exe? Bagaimana jika buildserver saya tidak memiliki internet?
bitbonk


20

Anda perlu berkomitmen .nuget\nuget.targets, tetapi tidak nuget.exe. Target akan men-download exe jika tidak ada, asalkan Anda mengubah DownloadNuGetExeke truedalam nuget.targets


4

Meskipun saya biasanya tidak menyukai gagasan untuk menambahkan exe ke kontrol sumber, saya menyarankan bahwa kontrol sumber harus berisi apa pun yang diperlukan untuk membuka, membangun, dan menjalankan proyek.

Dalam hal ini, sepertinya folder .nuget adalah dependensi yang diperlukan. Oleh karena itu, harus di bawah kendali sumber.

Satu-satunya pertanyaan tersisa, yang perlu Anda teliti, adalah bagaimana NuGet akan bereaksi jika folder itu ditandai hanya-baca, yang akan dilakukan TFS setelah check-in.


Pembaruan: Saya melakukan sedikit lebih banyak penelitian tentang ini karena saya belum pernah menggunakan NuGet sebelumnya. http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html

Saya sarankan mungkin yang ingin Anda lakukan adalah menjadikan NuGet sebagai persyaratan yang harus diinstal di setiap workstation developer.

Selanjutnya, Anda harus menempatkan di kontrol sumber file batch yang diperlukan untuk menyiapkan workstation untuk mulai mengedit proyek. File batch akan menjalankan perintah yang diperlukan untuk mendapatkan dan menginstal paket dependensi.

Selain itu, saya akan mengatakan Anda mungkin ingin menghubungi NuGet secara langsung untuk menanyakan kepada mereka bagaimana tepatnya ini seharusnya berhasil.


1
Saya pikir <RestorePackages>true</RestorePackages>dalam file * .csproj harus cukup informasi untuk Visual Studio tetapi mungkin tidak.
Borek Bernard

1

Sekarang nuget mendukung pemulihan paket, kami melihatnya lebih dekat.

Kami menggunakan Subversion untuk kontrol sumber, dan pemikiran awal saya adalah yang .nugetharus ditambahkan ke repositori kami, tetapi ditambahkan menggunakan svn: eksternal sehingga mengarah ke satu lokasi.

Dengan begitu kami dapat secara otomatis mengeluarkan versi baru ke semua pengembang dan proyek. Untuk proyek di cabang rilis, daripada HEAD, kita dapat menentukan revisi referensi svn: externals jika kita ingin meninggalkan nuget sendiri.

Kami memiliki banyak proyek, jadi itu juga berarti tidak menduplikasi nuget.exebeberapa kali dalam repo.


Saya tidak bisa meminta NuGet untuk memulihkan paket proyek eksternal. Apakah ini berhasil untuk Anda ?.
Doguhan Uluca

Ya, meskipun NuGet.exe tampaknya mengalami masalah mengautentikasi ke repo lokal kami (otentikasi IIS 6 + SSL + AD) sementara Powershell atau Plugin Ekstensi berfungsi dengan baik.
si618

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.