Bagikan melalui


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:

  1. Periksa konten dua file konfigurasi tingkat pengguna dan simpan yang Anda inginkan di bawah ~/.nuget/NuGet folder.
  2. 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.Configmana {IDE} bisa , {Version}VisualStudioadalah versi Visual Studio seperti 14.0, dan {SKU} baik Community, , Proatau Enterprise. 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:

  1. FileNuGetDefaults.Config, yang berisi pengaturan yang hanya terkait dengan sumber paket.
  2. File tingkat komputer.
  3. File tingkat pengguna.
  4. 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 dalam c:\A\B\C, NuGet mencari dan memuat file konfigurasi di c:\, lalu c:\A, lalu c:\A\B, dan akhirnya c:\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:

  1. 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 di NuGetDefaults.Config ditimpa jika ada di file konfigurasi lainnya.
  2. Untuk elemen koleksi (seperti <packageSources>), NuGet menggabungkan nilai dari semua file konfigurasi ke dalam satu koleksi.
  3. 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 di disk_drive_1.

  • Dipanggil dari disk_drive_2/ atau disk_drive_/tmp: File tingkat pengguna (A) dimuat terlebih dahulu, lalu NuGet masuk ke akar disk_drive_2 dan menemukan file (B). NuGet juga mencari file konfigurasi di /tmp tetapi tidak menemukannya. Akibatnya, repositori nuget.org default pada digunakan, pemulihan paket diaktifkan, dan paket diperluas di disk_drive_2/tmp.

  • Dipanggil dari disk_drive_2/Project1 atau disk_drive_2/Project1/Source: File tingkat pengguna (A) dimuat terlebih dahulu, lalu NuGet memuat file (B) dari disk_drive_2akar , diikuti oleh file (C). Pengaturan dalam (C) mengambil alih yang ada di (B) dan (A), sehingga repositoryPath di mana paket diinstal bukan disk_drive_2/Project1/External/Packagesdisk_drive_2/tmp. Selain itu, karena (C) menghapus <packageSources>, nuget.org tidak lagi tersedia sebagai sumber yang hanya https://MyPrivateRepo/ES/nugetmenyisakan .

  • Dipanggil dari disk_drive_2/Project2 atau disk_drive_2/Project2/Source: File tingkat pengguna (A) dimuat terlebih dahulu diikuti oleh file (B) dan file (D). Karena packageSources tidak dibersihkan, baik nuget.org dan https://MyPrivateRepo/DQ/nuget tersedia sebagai sumber. Paket diperluas disk_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 seperti packageSources dalam file konfigurasi reguler dan menentukan sumber default. NuGet menggunakan sumber secara berurutan saat menginstal atau memperbarui paket dalam proyek menggunakan packages.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, di NuGet.Config mana setiap sumber yang terpengaruh dicantumkan berdasarkan namanya dan nilai yang true/false menunjukkan apakah itu dinonaktifkan. Ini memungkinkan nama sumber dan URL untuk tetap masuk packageSources tanpa mengaktifkannya secara default. Pengembang individual kemudian dapat mengaktifkan kembali sumber dengan mengatur nilai sumber ke false dalam file lain NuGet.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 untuk nuget push operasi, mengesampingkan default bawaan dari nuget.org. Administrator dapat menyebarkan pengaturan ini untuk menghindari penerbitan paket internal ke publik nuget.org secara tidak sengaja, karena pengembang secara khusus perlu menggunakan nuget push -Source untuk menerbitkan ke nuget.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>