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?

Borek Bernard
sumber
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.

Jeremy
sumber
@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.

Gan
sumber
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
22

Menurut utas ini , folder .nuget harus dikontrol versi.

Borek Bernard
sumber
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

Richard Szalay
sumber
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.

Bukan saya
sumber
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.

si618
sumber
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
1

Kami memiliki nuget.configfile di folder, karena memiliki referensi ke server Nuget internal kami, menggunakan area Sumber Paket: https://docs.nuget.org/consume/nuget-config-settings

Selain alasan ini, Anda harus membiarkan Visual Studio menangani pengunduhan paket.

Karl Gjertsen
sumber