Konfigurasi NuGet yang umum
Perilaku NuGet didorong oleh pengaturan akumulasi dalam satu atau beberapa NuGet.Config
file (XML) yang dapat ada di solusi- (proyek jika tidak ada solusi yang digunakan), tingkat pengguna, dan seluruh komputer. File global NuGetDefaults.Config
juga secara khusus mengonfigurasi sumber paket. Pengaturan berlaku untuk semua perintah yang dikeluarkan di CLI, Konsol Manajer Paket, dan UI Manajer Paket.
Mengonfigurasi lokasi dan penggunaan file
Cakupan | Lokasi file NuGet.Config |
Deskripsi |
---|---|---|
Solusi | Folder saat ini (alias folder Solusi) atau folder apa pun hingga akar drive. | Di folder solusi, pengaturan berlaku untuk semua proyek dalam subfolder. Perhatikan bahwa jika file konfigurasi ditempatkan di folder proyek, file tersebut tidak berpengaruh pada proyek tersebut. Saat memulihkan proyek pada baris perintah, direktori proyek diperlakukan sebagai direktori solusi, yang dapat menyebabkan perbedaan perilaku saat memulihkan proyek vs solusi. |
Pengguna | Windows%appdata%\NuGet\NuGet.Config :Mac/Linux: ~/.config/NuGet/NuGet.Config atau ~/.nuget/NuGet/NuGet.Config (bervariasi menurut alat) Konfigurasi tambahan didukung di semua platform. Konfigurasi ini tidak dapat diedit oleh alat. Windows %appdata%\NuGet\config\*.Config : Mac/Linux: ~/.config/NuGet/config/*.config atau ~/.nuget/config/*.config |
Pengaturan berlaku untuk semua operasi, tetapi ditimpa oleh pengaturan tingkat solusi apa pun. |
Komputer | Windows%ProgramFiles(x86)%\NuGet\Config :Mac/Linux: /etc/opt/NuGet/Config (Linux) atau /Library/Application Support (Mac) secara default. Jika $NUGET_COMMON_APPLICATION_DATA bukan null atau kosong, maka $NUGET_COMMON_APPLICATION_DATA/NuGet/Config sebagai gantinya |
Pengaturan berlaku untuk semua operasi di komputer, tetapi ditimpa oleh pengaturan tingkat pengguna atau solusi apa pun. |
Catatan
Di Mac/Linux, lokasi file konfigurasi pengguna bervariasi menurut alat. .NET CLI menggunakan ~/.nuget/NuGet
folder, sementara Mono menggunakan ~/.config/NuGet
folder.
Di Mac/Linux, lokasi file konfigurasi tingkat pengguna bervariasi menurut alat
Di Mac/Linux, lokasi file konfigurasi pengguna bervariasi menurut alat.
Sebagian besar pengguna menggunakan alat yang mencari file konfigurasi pengguna di ~/.nuget/NuGet
bawah folder.
Alat-alat lain ini mencari file konfigurasi pengguna di ~/.config/NuGet
bawah folder:
- Mono
- NuGet.exe
- Visual Studio 2019 untuk Mac (dan versi yang lebih lama)
- Visual Studio 2022 untuk Mac (dan versi yang lebih baru), hanya saat mengerjakan proyek Mono klasik.
Jika alat yang Anda gunakan melibatkan kedua lokasi, pertimbangkan untuk mengonsolidasikannya dengan mengikuti langkah-langkah ini untuk memungkinkan Anda bekerja hanya dengan satu file konfigurasi tingkat pengguna:
- Periksa konten dua file konfigurasi tingkat pengguna dan simpan yang Anda inginkan di bawah
~/.nuget/NuGet
folder. - Atur tautan simbolis dari
~/.nuget/NuGet
ke~/.config/NuGet
. Misalnya, jalankan perintah bash:ln -s ~/.nuget/NuGet ~/.config/NuGet
.
Catatan untuk versi NuGet yang lebih lama:
- NuGet 3.3 dan yang lebih lama menggunakan
.nuget
folder untuk pengaturan di seluruh solusi. Folder ini tidak digunakan dalam NuGet 3.4+. - Untuk NuGet 2.6 hingga 3.x, file konfigurasi tingkat komputer pada Windows terletak di , di
%ProgramData%\NuGet\Config[\{IDE}[\{Version}[\{SKU}]]]\NuGet.Config
mana{IDE}
bisa ,{Version}
VisualStudio
adalah versi Visual Studio seperti14.0
, dan{SKU}
baikCommunity
, ,Pro
atauEnterprise
. Untuk memigrasikan pengaturan ke NuGet 4.0+, cukup salin file konfigurasi ke%ProgramFiles(x86)%\NuGet\Config
. Di Linux, lokasi sebelumnya ini adalah/etc/opt
, dan di Mac,/Library/Application Support
.
Mengubah pengaturan konfigurasi
File NuGet.Config
adalah file teks XML sederhana yang berisi pasangan kunci/nilai seperti yang dijelaskan dalam topik Pengaturan Konfigurasi NuGet.
Pengaturan dikelola menggunakan perintah konfigurasi NuGet CLI:
- Secara default, perubahan dilakukan pada file konfigurasi tingkat pengguna. (Di Mac/Linux, lokasi file konfigurasi tingkat pengguna bervariasi menurut alat)
- Untuk mengubah pengaturan dalam file lain, gunakan sakelar
-configFile
. Dalam hal ini file dapat menggunakan nama file apa pun. - Kunci selalu peka huruf besar/kecil.
- Elevasi diperlukan untuk mengubah pengaturan dalam file pengaturan tingkat komputer.
Peringatan
Meskipun Anda dapat memodifikasi file di editor teks apa pun, NuGet (v3.4.3 dan yang lebih baru) secara diam-diam mengabaikan seluruh file konfigurasi jika berisi XML yang salah format (tag yang tidak cocok, tanda kutip yang tidak valid, dll.). Inilah sebabnya mengapa lebih baik mengelola pengaturan menggunakan nuget config
.
Mengatur nilai
Windows:
# Set repositoryPath in the user-level config file
nuget config -set repositoryPath=c:\packages
# Set repositoryPath in solution-level files
nuget config -set repositoryPath=c:\packages -configfile c:\my.Config
nuget config -set repositoryPath=c:\packages -configfile .\myApp\NuGet.Config
# Set repositoryPath in the computer-level file (requires elevation)
nuget config -set repositoryPath=c:\packages -configfile %ProgramFiles(x86)%\NuGet\Config\NuGet.Config
Mac/Linux:
# Set repositoryPath in the user-level config file
nuget config -set repositoryPath=/home/packages
# Set repositoryPath in solution-level files
nuget config -set repositoryPath=/home/projects/packages -configfile /home/my.Config
nuget config -set repositoryPath=/home/packages -configfile home/myApp/NuGet.Config
# Set repositoryPath in the computer-level file (requires elevation)
nuget config -set repositoryPath=/home/packages -configfile $XDG_DATA_HOME/NuGet.Config
Catatan
Di NuGet 3.4 dan yang lebih baru Anda dapat menggunakan variabel lingkungan dalam nilai apa pun, seperti di repositoryPath=%PACKAGEHOME%
(Windows) dan repositoryPath=$PACKAGEHOME
(Mac/Linux).
Menghapus nilai
Untuk menghapus nilai, tentukan kunci dengan nilai kosong.
# Windows
nuget config -set repositoryPath= -configfile c:\my.Config
# Mac/Linux
nuget config -set repositoryPath= -configfile /home/my.Config
Membuat file konfigurasi baru
Salin templat di bawah ini ke dalam file baru lalu gunakan nuget config -configFile <filename>
untuk mengatur nilai:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
</configuration>
Bagaimana pengaturan diterapkan
Beberapa NuGet.Config
file memungkinkan Anda menyimpan pengaturan di lokasi yang berbeda sehingga berlaku untuk satu solusi, atau sekelompok solusi.
Pengaturan ini secara kolektif berlaku untuk operasi NuGet apa pun yang dipanggil dari baris perintah atau dari Visual Studio, dengan pengaturan yang ada "paling dekat" dengan solusi atau folder saat ini yang diutamakan.
Jika alat baris perintah digunakan pada file proyek, bukan file solusi, maka direktori proyek digunakan sebagai "direktori solusi", yang dapat menyebabkan perilaku yang tidak konsisten ketika ada NuGet.Config
file dalam subdirektori file solusi.
Secara khusus, ketika file konfigurasi tidak ditentukan secara eksplisit pada baris perintah, NuGet memuat pengaturan dari file konfigurasi yang berbeda dalam urutan berikut:
- File
NuGetDefaults.Config
, yang berisi pengaturan yang hanya terkait dengan sumber paket. - File tingkat komputer.
- File tingkat pengguna.
- File yang ditemukan di setiap folder di jalur dari akar drive ke folder saat ini (di mana
nuget.exe
dipanggil atau folder yang berisi solusi Visual Studio). Misalnya, jika perintah dipanggil dalamc:\A\B\C
, NuGet mencari dan memuat file konfigurasi dic:\
, laluc:\A
, laluc:\A\B
, dan akhirnyac:\A\B\C
.
Ketika file konfigurasi secara eksplisit ditentukan pada baris perintah, misalnya nuget -configFile my.config
atau dotnet restore --configfile my.config
, hanya pengaturan dari file yang ditentukan yang akan digunakan.
Saat NuGet menemukan pengaturan dalam file-file ini, pengaturan diterapkan sebagai berikut:
- Untuk elemen item tunggal, NuGet menggantikan nilai yang ditemukan sebelumnya untuk kunci yang sama. Ini berarti bahwa pengaturan yang "paling dekat" dengan folder atau solusi saat ini mengambil alih orang lain yang ditemukan sebelumnya. Misalnya,
defaultPushSource
pengaturan diNuGetDefaults.Config
ditimpa jika ada di file konfigurasi lainnya. - Untuk elemen koleksi (seperti
<packageSources>
), NuGet menggabungkan nilai dari semua file konfigurasi ke dalam satu koleksi. - Ketika
<clear />
ada untuk simpul tertentu, NuGet mengabaikan nilai konfigurasi yang ditentukan sebelumnya untuk simpul tersebut.
Tip
nuget.config
Tambahkan file di akar repositori solusi Anda. Ini dianggap sebagai praktik terbaik karena mempromosikan pengulangan dan memastikan bahwa pengguna yang berbeda memiliki konfigurasi NuGet yang sama.
panduan Pengaturan
Katakanlah Anda memiliki struktur folder berikut pada dua drive terpisah:
disk_drive_1
User
disk_drive_2
Project1
Source
Project2
Source
tmp
Anda kemudian memiliki empat NuGet.Config
file di lokasi berikut dengan konten yang diberikan. (File tingkat komputer tidak disertakan dalam contoh ini, tetapi akan berulah mirip dengan file tingkat pengguna.)
File A. File tingkat pengguna, (%appdata%\NuGet\NuGet.Config
di Windows, ~/.config/NuGet/NuGet.Config
di Mac/Linux):
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<activePackageSource>
<add key="NuGet official package source" value="https://api.nuget.org/v3/index.json" />
</activePackageSource>
</configuration>
File B. disk_drive_2/NuGet.Config
:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="repositoryPath" value="disk_drive_2/tmp" />
</config>
<packageRestore>
<add key="enabled" value="True" />
</packageRestore>
</configuration>
File C. disk_drive_2/Project1/NuGet.Config
:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="repositoryPath" value="External/Packages" />
<add key="defaultPushSource" value="https://MyPrivateRepo/ES/api/v2/package" />
</config>
<packageSources>
<clear /> <!-- ensure only the sources defined below are used -->
<add key="MyPrivateRepo - ES" value="https://MyPrivateRepo/ES/nuget" />
</packageSources>
</configuration>
File D. disk_drive_2/Project2/NuGet.Config
:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<!-- Add this repository to the list of available repositories -->
<add key="MyPrivateRepo - DQ" value="https://MyPrivateRepo/DQ/nuget" />
</packageSources>
</configuration>
NuGet kemudian memuat dan menerapkan pengaturan sebagai berikut, tergantung pada tempatnya dipanggil:
Dipanggil dari
disk_drive_1/users
: Hanya repositori default yang tercantum dalam file konfigurasi tingkat pengguna (A) yang digunakan, karena itulah satu-satunya file yang ditemukan didisk_drive_1
.Dipanggil dari
disk_drive_2/
ataudisk_drive_/tmp
: File tingkat pengguna (A) dimuat terlebih dahulu, lalu NuGet masuk ke akardisk_drive_2
dan menemukan file (B). NuGet juga mencari file konfigurasi di/tmp
tetapi tidak menemukannya. Akibatnya, repositorinuget.org
default pada digunakan, pemulihan paket diaktifkan, dan paket diperluas didisk_drive_2/tmp
.Dipanggil dari
disk_drive_2/Project1
ataudisk_drive_2/Project1/Source
: File tingkat pengguna (A) dimuat terlebih dahulu, lalu NuGet memuat file (B) daridisk_drive_2
akar , diikuti oleh file (C). Pengaturan dalam (C) mengambil alih yang ada di (B) dan (A), sehinggarepositoryPath
di mana paket diinstal bukandisk_drive_2/Project1/External/Packages
disk_drive_2/tmp
. Selain itu, karena (C) menghapus<packageSources>
, nuget.org tidak lagi tersedia sebagai sumber yang hanyahttps://MyPrivateRepo/ES/nuget
menyisakan .Dipanggil dari
disk_drive_2/Project2
ataudisk_drive_2/Project2/Source
: File tingkat pengguna (A) dimuat terlebih dahulu diikuti oleh file (B) dan file (D). KarenapackageSources
tidak dibersihkan, baiknuget.org
danhttps://MyPrivateRepo/DQ/nuget
tersedia sebagai sumber. Paket diperluasdisk_drive_2/tmp
seperti yang ditentukan dalam (B).
Konfigurasi luas pengguna tambahan
Dimulai dengan 5.7, NuGet telah menambahkan dukungan untuk file konfigurasi luas pengguna tambahan. Ini memungkinkan vendor pihak ketiga untuk menambahkan file konfigurasi pengguna tambahan tanpa elevasi.
File konfigurasi ini ditemukan di folder konfigurasi lebar pengguna standar dalam config
subfolder.
Semua file yang diakhir dengan .config
atau .Config
akan dipertimbangkan.
File-file ini tidak dapat diedit oleh alat standar.
OS Platform | Konfigurasi Tambahan |
---|---|
Windows | %appdata%\NuGet\config\*.Config |
Mac/Linux | ~/.config/NuGet/config/*.config atau ~/.nuget/config/*.config |
File default NuGet
File NuGetDefaults.Config
ada untuk menentukan sumber paket tempat paket diinstal dan diperbarui, dan untuk mengontrol target default untuk menerbitkan paket dengan nuget push
. Karena administrator dapat dengan mudah (menggunakan Kebijakan Grup, misalnya) menyebarkan file yang konsisten NuGetDefaults.Config
ke pengembang dan membangun komputer, mereka dapat memastikan bahwa semua orang di organisasi menggunakan sumber paket yang benar daripada nuget.org.
Penting
File tidak NuGetDefaults.Config
pernah menyebabkan sumber paket dihapus dari konfigurasi NuGet pengembang. Itu berarti jika pengembang telah menggunakan NuGet dan karena itu memiliki sumber paket nuget.org terdaftar, itu tidak akan dihapus setelah pembuatan NuGetDefaults.Config
file.
Selain itu, tidak ada NuGetDefaults.Config
mekanisme lain di NuGet yang dapat mencegah akses ke sumber paket seperti nuget.org. Jika organisasi ingin memblokir akses tersebut, organisasi harus menggunakan cara lain seperti firewall untuk melakukannya.
NuGetDefaults.Config
Lokasi
Tabel berikut menjelaskan di mana NuGetDefaults.Config
file harus disimpan, tergantung pada OS target:
OS Platform | NuGetDefaults.Config Lokasi |
---|---|
Windows | Visual Studio 2017 atau NuGet 4.x+:%ProgramFiles(x86)%\NuGet Visual Studio 2015 dan yang lebih lama atau NuGet 3.x dan yang lebih lama: %PROGRAMDATA%\NuGet |
Mac/Linux | $XDG_DATA_HOME (biasanya ~/.local/share atau /usr/local/share , tergantung pada distribusi OS) |
Pengaturan NuGetDefaults.Config
packageSources
: koleksi ini memiliki arti yang sama sepertipackageSources
dalam file konfigurasi reguler dan menentukan sumber default. NuGet menggunakan sumber secara berurutan saat menginstal atau memperbarui paket dalam proyek menggunakanpackages.config
format manajemen. Untuk proyek yang menggunakan format PackageReference, NuGet menggunakan sumber lokal terlebih dahulu, lalu sumber pada berbagi jaringan, lalu sumber HTTP, terlepas dari urutan dalam file konfigurasi. NuGet selalu mengabaikan urutan sumber dengan operasi pemulihan.disabledPackageSources
: koleksi ini juga memiliki arti yang sama seperti dalam file, diNuGet.Config
mana setiap sumber yang terpengaruh dicantumkan berdasarkan namanya dan nilai yangtrue
/false
menunjukkan apakah itu dinonaktifkan. Ini memungkinkan nama sumber dan URL untuk tetap masukpackageSources
tanpa mengaktifkannya secara default. Pengembang individual kemudian dapat mengaktifkan kembali sumber dengan mengatur nilai sumber kefalse
dalam file lainNuGet.Config
tanpa harus menemukan URL yang benar lagi. Ini juga berguna untuk memberi pengembang daftar lengkap URL sumber internal untuk organisasi sambil hanya mengaktifkan sumber tim individu secara default.defaultPushSource
: menentukan target default untuknuget push
operasi, mengesampingkan default bawaan darinuget.org
. Administrator dapat menyebarkan pengaturan ini untuk menghindari penerbitan paket internal ke publiknuget.org
secara tidak sengaja, karena pengembang secara khusus perlu menggunakannuget push -Source
untuk menerbitkan kenuget.org
.
Contoh NuGetDefaults.Config dan aplikasi
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- defaultPushSource key works like the 'defaultPushSource' key of NuGet.Config files. -->
<!-- This can be used by administrators to prevent accidental publishing of packages to nuget.org. -->
<config>
<add key="defaultPushSource" value="https://contoso.com/packages/" />
</config>
<!-- Default Package Sources; works like the 'packageSources' section of NuGet.Config files. -->
<!-- This collection cannot be deleted or modified but can be disabled/enabled by users. -->
<packageSources>
<add key="Contoso Package Source" value="https://contoso.com/packages/" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
</packageSources>
<!-- Default Package Sources that are disabled by default. -->
<!-- Works like the 'disabledPackageSources' section of NuGet.Config files. -->
<!-- Sources cannot be modified or deleted either but can be enabled/disabled by users. -->
<disabledPackageSources>
<add key="nuget.org" value="true" />
</disabledPackageSources>
</configuration>
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk