Saya memiliki konvensi berikut untuk sebagian besar proyek saya:
/src
/Solution.sln
/SolutionFolder
/Project1
/Project2
/etc..
/lib
/Moq
moq.dll
license.txt
/Yui-Compressor
yui.compressor.dll
/tools
/ILMerge
ilmerge.exe
Anda akan melihat bahwa saya tidak menyimpan perpustakaan eksternal di dalam folder sumber. Saya juga sangat tertarik menggunakan NuGet tetapi tidak ingin perpustakaan eksternal ini berada di dalam folder source. Apakah NuGet memiliki pengaturan untuk mengubah direktori yang memuat semua paket?
.net
visual-studio
nuget
nuget-package
TheCloudlessSky
sumber
sumber
Jawaban:
Sekarang mungkin untuk mengontrol folder tempat paket-paket tersebut diinstal.
http://nuget.codeplex.com/workitem/215
Sunting: Lihat komentar Phil Haack pada 10 Desember 2010 pukul 11:45 malam (dalam item pekerjaan / tautan di atas). Dukungan ini sebagian diimplementasikan pada 1.0, tetapi tidak didokumentasikan.
Menurut @dfowler: Tambahkan file nuget.config di sebelah solusi dengan ini:
Ada paket nuget untuk membuat folder override paket.
Pembaruan untuk versi 2.1
Seperti yang dikomentari Azat, sekarang ada dokumentasi resmi tentang cara mengontrol lokasi paket. The rilis catatan untuk 2.1 menspesifikasikan konfigurasi berikut dalam file nuget.config (lihat catatan rilis untuk deskripsi tempat valid untuk menempatkan file konfigurasi dan bagaimana hirarkis Model konfigurasi karya):
Ini akan mengubah folder paket untuk tingkat konfigurasi Anda memasukkan file (solusi jika Anda meletakkannya di direktori solusi, proyek di direktori proyek dan sebagainya). Perhatikan bahwa catatan rilis menyatakan:
sumber
ini TIDAK bekerja untuk saya:
ini berhasil bagi saya:
sumber
Oke demi orang lain yang membaca posting ini - inilah yang saya mengerti dari segudang jawaban di atas:
File nuget.config dalam folder .nuget relatif terhadap folder itu. Ini penting karena jika folder baru Anda seperti '../Paket' yang akan meletakkannya di tempat yang selalu keluar dari kotak. Sebagai @ bruce14 menyatakan Anda harus melakukan '../../Paket' sebagai gantinya
Saya tidak bisa mendapatkan nuget terbaru (2.8.5) untuk menemukan folder paket di luar lokasi standar tanpa mengaktifkan paket restore. Jadi begitu Anda mengaktifkan paket restore maka yang berikut harus ditambahkan ke file nuget.config di dalam folder .nuget untuk mengubah lokasi:
(Ini penting) Jika Anda melakukan perubahan pada lokasi folder paket di dalam file nuget.config, Anda harus memulai kembali visual studio atau menutup / memuat ulang solusi agar perubahan diterapkan.
sumber
Solusi untuk Nuget 3.2 pada Visual Studio 2015 adalah:
Menggunakan forward slash untuk folder induk. Simpan file di atas (nuget.config) di folder solusi.
Referensi tersedia di sini
sumber
../lib
Itu adalah garis miring ke depan, bukan garis miring ke belakang. Yang kamu maksudSolusi yang diusulkan dalam catatan rilis untuk 2.1 tidak bekerja di luar kotak. Mereka lupa menyebutkan bahwa ada kode:
yang mencegahnya bekerja. Untuk memperbaikinya, Anda perlu memodifikasi file NuGet.targets Anda dan menghapus parameter 'OutputDirectory':
Jadi sekarang, jika Anda menambahkan config 'repositoryPath' di suatu tempat di NuGet.config (lihat catatan rilis untuk deskripsi tempat yang valid untuk meletakkan file config), itu akan mengembalikan semua paket ke satu lokasi, tetapi ... .csproj Anda masih berisi petunjuk untuk majelis yang ditulis sebagai jalur relatif ...
Saya masih tidak mengerti mengapa mereka melakukan hal yang sulit alih-alih mengubah PackageManager sehingga itu akan menambah jalur petunjuk relatif ke PackagesDir. Itulah yang saya lakukan secara manual untuk memiliki lokasi paket yang berbeda secara lokal (di desktop saya) dan pada agen pembangunan.
sumber
Selain jawaban Shane Kms, jika Anda telah mengaktifkan Pemulihan Paket Nuget, Anda mengedit NuGet.config yang terletak di folder .nuget sebagai berikut:
Perhatikan tambahan ".. \", karena backtracks dari folder .nuget dan bukan folder solusi.
sumber
Tidak satu pun dari jawaban ini yang bekerja untuk saya (Nuget 2.8.6) karena kehilangan beberapa tips, akan mencoba menambahkannya di sini karena mungkin berguna bagi orang lain.
Setelah membaca sumber-sumber berikut:
https://docs.nuget.org/consume/NuGet-Config-Settings
https://github.com/NuGet/Home/issues/1346
Tampaknya
Misalnya
Anda juga dapat menggunakan perintah NuGet untuk memastikan bahwa sintaks akan benar seperti ini:
sumber
Untuk proyek .NET Core dan Visual Studio 2017 saya dapat mengembalikan semua paket ke jalur relatif dengan menyediakan konfigurasi ini:
Berdasarkan pengalaman saya folder lib dibuat pada tingkat yang sama di mana Nuget.config ditemukan, di mana pun file sln berada. Saya menguji dan perilaku yang sama untuk mengembalikan dotnet baris perintah, dan Visual Studio 2017 membangun kembali
sumber
globalPackagesFolder
kunci ke folder paket proyek saya. Saya mencoba menambahkan satu paket dengandotnet add package MyPackage
.nuget.exe
mengunduh seluruh kerangka 83 paket .NET ke folder itu. Bukan itu yang saya maksudkan. Saya hanya ingin MyPackage tunggal saya di folder paket lokal saya yang dikendalikan sumber.File konfigurasi dalam jawaban yang diterima berfungsi untuk saya di VS2012. Namun, bagi saya itu hanya berfungsi ketika saya melakukan hal berikut:
Jika saya mengikuti langkah-langkah itu saya bisa menggunakan folder paket bersama.
sumber
Untuk mengubah jalur untuk proyek menggunakan PackageReference alih-alih paket.config yang perlu Anda gunakan
globalPackagesFolder
Dari https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file
Saya meletakkan Nuget.config di sebelah file solusi saya dan berhasil.
sumber
Satu lagi berita gembira kecil yang baru saja saya temukan. (Ini mungkin sangat mendasar sehingga beberapa belum menyebutkannya, tetapi ini penting untuk solusi saya.) Folder "paket" berakhir di folder yang sama dengan file .sln Anda.
Kami memindahkan file .sln kami dan kemudian memperbaiki semua jalur di dalamnya untuk menemukan berbagai proyek dan voila! Folder paket kami berakhir di tempat yang kami inginkan.
sumber
UPDATE untuk VS 2017:
Terlihat orang-orang di tim Nuget akhirnya mulai menggunakan Nuget sendiri yang membantu mereka menemukan dan memperbaiki beberapa hal penting. Jadi sekarang (jika saya tidak salah, karena masih tidak bermigrasi ke VS 2017) di bawah ini tidak diperlukan lagi. Anda harus dapat mengatur "repositoryPath" ke folder lokal dan itu akan berfungsi. Bahkan Anda dapat membiarkannya sama sekali karena secara default mengembalikan lokasi dipindahkan dari folder solusi ke level mesin. Lagi - saya masih belum mengujinya sendiri
VS 2015 dan sebelumnya
Hanya tip untuk jawaban lain (khusus ini ):
Lokasi folder Paket NuGet dapat diubah melalui konfigurasi, tetapi VisualStudio masih merujuk rakitan di folder ini secara relatif:
Untuk mengatasinya (hingga solusi yang lebih baik) saya menggunakan perintah subst untuk membuat drive virtual yang menunjuk ke lokasi baru folder Paket:
Sekarang ketika menambahkan paket NuGet baru, referensi proyek menggunakan lokasi absolutnya:
catatan:
sumber
<HintPath>$(SolutionDir)\packages\SomeAssembly\lib\net45\SomeAssembly.dll</HintPath>
daripada menggunakansubst
Baru saja memperbarui dengan Nuget 2.8.3. Untuk mengubah lokasi paket yang diinstal, saya mengaktifkan pemulihan paket dari solusi mengklik kanan. Diedit NuGet.Config dan menambahkan baris ini:
Kemudian membangun kembali solusi, itu mengunduh semua paket ke folder yang saya inginkan dan memperbarui referensi secara otomatis.
sumber
Cara paling konsisten adalah dengan menggunakan
nuget config
untuk mengatur konfigurasi dengan benar:https://docs.microsoft.com/en-us/nuget/consume-packages/configuring-nuget-behavior#changing-config-settings
sumber