Aracılığıyla paylaş


Ortak NuGet yapılandırmaları

NuGet'in davranışı, çözümde (çözüm kullanılmadıysa proje), kullanıcı ve bilgisayar genelindeki düzeylerde mevcut olabilecek bir veya daha fazla NuGet.Config (XML) dosyada birikmiş ayarlar tarafından yönlendirilir. Genel NuGetDefaults.Config bir dosya ayrıca paket kaynaklarını özel olarak yapılandırıyor. Ayarlar CLI, Paket Yöneticisi Konsolu ve Paket Yöneticisi kullanıcı arabiriminde verilen tüm komutlara uygulanır.

Yapılandırma dosyası konumları ve kullanımları

Kapsam NuGet.Config dosyasının konumu Açıklama
Çözüm Geçerli klasör (diğer adıyla Çözüm klasörü) veya sürücü köküne kadar olan herhangi bir klasör. Bir çözüm klasöründe, ayarlar alt klasörlerdeki tüm projelere uygulanır. Bir yapılandırma dosyası bir proje klasörüne yerleştirilirse, bu proje üzerinde hiçbir etkisi olmadığını unutmayın. Komut satırında projeyi geri yüklerken, projenin dizini çözüm dizini olarak değerlendirilir ve bu da projeyi geri yüklerken davranış farklılıklarına neden olabilir.
User Windows:%appdata%\NuGet\NuGet.Config
Mac/Linux:~/.config/NuGet/NuGet.Config veya ~/.nuget/NuGet/NuGet.Config (araçlara göre değişir)
Tüm platformlarda ek yapılandırmalar desteklenir. Bu yapılandırmalar araçlar tarafından düzenlenemez.
Windows:%appdata%\NuGet\config\*.Config
Mac/Linux:~/.config/NuGet/config/*.config veya ~/.nuget/config/*.config
Ayarlar tüm işlemler için geçerlidir, ancak tüm çözüm düzeyi ayarları tarafından geçersiz kılınabilir.
Bilgisayar Windows:%ProgramFiles(x86)%\NuGet\Config
Mac/Linux:/etc/opt/NuGet/Config (Linux) veya /Library/Application Support (Mac) varsayılan olarak. Null veya boş değilse $NUGET_COMMON_APPLICATION_DATA , bunun $NUGET_COMMON_APPLICATION_DATA/NuGet/Config yerine
Ayarlar bilgisayardaki tüm işlemlere uygulanır, ancak tüm kullanıcı veya çözüm düzeyi ayarları tarafından geçersiz kılınabilir.

Not

Mac/Linux'ta kullanıcı yapılandırma dosyası konumu araçlara göre değişir. .NET CLI klasörü, ~/.nuget/NuGet Mono ise klasörü kullanır ~/.config/NuGet .

Mac/Linux'ta kullanıcı düzeyinde yapılandırma dosyası konumu araçlara göre değişir

Mac/Linux'ta kullanıcı yapılandırma dosyası konumu araçlara göre değişir. Kullanıcıların çoğu, klasörün altındaki ~/.nuget/NuGet kullanıcı yapılandırma dosyasını arayabilen araçları kullanır. Bu diğer araçlar, klasörün altındaki ~/.config/NuGet kullanıcı yapılandırma dosyasını arar:

  • Mono
  • NuGet.exe
  • Mac için Visual Studio 2019 (ve önceki sürümler)
  • Mac için Visual Studio 2022 (ve sonraki sürümler), yalnızca klasik Mono projelerinde çalışırken.

Kullandığınız araçlar her iki konumu da içeriyorsa, yalnızca bir kullanıcı düzeyinde yapılandırma dosyasıyla çalışmanıza izin vermek için aşağıdaki adımları izleyerek bunları birleştirmeyi göz önünde bulundurun:

  1. İki kullanıcı düzeyinde yapılandırma dosyasının içeriğini denetleyin ve istediğiniz dosyayı klasör altında ~/.nuget/NuGet tutun.
  2. sembolik bağlantısını olarak ~/.nuget/NuGet~/.config/NuGetayarlayın. Örneğin bash komutunu çalıştırın: ln -s ~/.nuget/NuGet ~/.config/NuGet.

NuGet'in önceki sürümleri için notlar:

  • NuGet 3.3 ve önceki sürümler, çözüm genelindeki ayarlar için bir .nuget klasör kullandı. Bu klasör NuGet 3.4+ içinde kullanılmaz.
  • NuGet 2.6 ile 3.x arasında, Windows'daki %ProgramData%\NuGet\Config[\{IDE}[\{Version}[\{SKU}]]]\NuGet.Configbilgisayar düzeyinde yapılandırma dosyası içinde bulunur; burada {IDE}{Version}VisualStudio, , gibi 14.0Visual Studio sürümüdür ve {SKU} , Proveya Enterpriseşeklindedir.Community Ayarları NuGet 4.0+ sürümüne geçirmek için yapılandırma dosyasını öğesine %ProgramFiles(x86)%\NuGet\Configkopyalamanız yeterlidir. Linux'ta bu önceki konum, ve Mac'te /Library/Application Supportşeklindeydi/etc/opt.

Yapılandırma ayarlarını değiştirme

NuGet.Config Dosya, NuGet Yapılandırması Ayarlar konusunda açıklandığı gibi anahtar/değer çiftleri içeren basit bir XML metin dosyasıdır.

Ayarlar NuGet CLI yapılandırma komutu kullanılarak yönetilir:

  • Varsayılan olarak, kullanıcı düzeyi yapılandırma dosyasında değişiklikler yapılır. (Mac/Linux'ta kullanıcı düzeyinde yapılandırma dosyasının konumu araçlara göre değişir)
  • Farklı bir dosyadaki ayarları değiştirmek için anahtarını kullanın -configFile . Bu durumda dosyalar herhangi bir dosya adını kullanabilir.
  • Anahtarlar her zaman büyük/küçük harfe duyarlıdır.
  • Bilgisayar düzeyinde ayarlar dosyasındaki ayarları değiştirmek için yükseltme gereklidir.

Uyarı

Dosyayı herhangi bir metin düzenleyicisinde değiştirebilmenize rağmen, NuGet (v3.4.3 ve üzeri), hatalı biçimlendirilmiş XML (eşleşmeyen etiketler, geçersiz tırnak işaretleri vb.) içeriyorsa yapılandırma dosyasının tamamını sessizce yoksayar. Bu nedenle ayarı kullanarak nuget configyönetmek tercih edilir.

Değer ayarlama

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

Not

NuGet 3.4 ve sonraki sürümlerde ortam değişkenlerini (Windows) ve repositoryPath=$PACKAGEHOME (Mac/Linux) gibi herhangi bir değerde repositoryPath=%PACKAGEHOME% kullanabilirsiniz.

Bir değeri kaldırma

Bir değeri kaldırmak için boş değer içeren bir anahtar belirtin.

# Windows
nuget config -set repositoryPath= -configfile c:\my.Config

# Mac/Linux
nuget config -set repositoryPath= -configfile /home/my.Config

Yeni yapılandırma dosyası oluşturma

Aşağıdaki şablonu yeni dosyaya kopyalayın ve değerleri ayarlamak için kullanın nuget config -configFile <filename> :

<?xml version="1.0" encoding="utf-8"?>
<configuration>
</configuration>

Ayarlar nasıl uygulanır?

Birden çok NuGet.Config dosya, ayarları tek bir çözüme veya bir çözüm grubuna uygulanacak şekilde farklı konumlarda depolamanıza olanak sağlar. Bu ayarlar, komut satırından veya Visual Studio'dan çağrılan tüm NuGet işlemleri için toplu olarak geçerlidir ve bir çözüme veya geçerli klasöre "en yakın" olan ayarlar önceliklidir. Bir komut satırı aracı çözüm dosyası yerine proje dosyasında kullanılıyorsa, proje dizini "çözüm dizini" olarak kullanılır ve bu da çözüm dosyasının alt dizininde bir NuGet.Config dosya olduğunda tutarsız davranışa yol açabilir.

Özellikle, bir yapılandırma dosyası komut satırında açıkça belirtilmediğinde, NuGet ayarları farklı yapılandırma dosyalarından aşağıdaki sırayla yükler:

  1. Yalnızca NuGetDefaults.Config paket kaynaklarıyla ilgili ayarları içeren dosya.
  2. Bilgisayar düzeyindeki dosya.
  3. Kullanıcı düzeyi dosyası.
  4. Sürücü kökünden geçerli klasöre giden yoldaki her klasörde bulunan dosyalar ( nuget.exe burada çağrılır veya Visual Studio çözümünü içeren klasör). Örneğin, içinde bir komut çağrılırsa c:\A\B\CNuGet içinde yapılandırma dosyalarını c:\arar ve yükler; ardından c:\A, ve c:\A\Bson olarak c:\A\B\C.

Örneğin nuget -configFile my.configdotnet restore --configfile my.config, komut satırında açıkça bir yapılandırma dosyası belirtildiğinde, yalnızca belirtilen dosyadaki ayarlar kullanılır.

NuGet bu dosyalardaki ayarları bulduğunda, bunlar aşağıdaki gibi uygulanır:

  1. Tek öğeli öğeler için NuGet, aynı anahtar için daha önce bulunan değerlerin yerini aldı. Bu, geçerli klasöre veya çözüme "en yakın" olan ayarların daha önce bulunan diğer tüm ayarları geçersiz kıldığını gösterir. Örneğin, defaultPushSource içindeki ayarı NuGetDefaults.Config , başka bir yapılandırma dosyasında varsa geçersiz kılınmış olur.
  2. NuGet, koleksiyon öğeleri (gibi <packageSources>) için tüm yapılandırma dosyalarındaki değerleri tek bir koleksiyonda birleştirir.
  3. Belirli bir düğüm için mevcut olduğunda <clear /> , NuGet söz konusu düğüm için önceden tanımlanmış yapılandırma değerlerini yoksayar.

İpucu

Çözüm deponuzun köküne bir nuget.config dosya ekleyin. Bu, yinelenebilirliği yükselttiğinden ve farklı kullanıcıların aynı NuGet yapılandırmasına sahip olmasını sağladığından en iyi yöntem olarak kabul edilir.

Ayarlar izlenecek yol

İki ayrı sürücüde aşağıdaki klasör yapısına sahip olduğunuzu varsayalım:

disk_drive_1
    User
disk_drive_2
    Project1
        Source
    Project2
        Source
    tmp

Ardından aşağıdaki konumlarda verilen içeriğe sahip dört NuGet.Config dosyanız vardır. (Bilgisayar düzeyindeki dosya bu örneğe dahil değildir, ancak kullanıcı düzeyindeki dosyaya benzer şekilde davranır.)

Dosya A. Kullanıcı düzeyinde dosya, (%appdata%\NuGet\NuGet.Config Windows'ta, ~/.config/NuGet/NuGet.Config Mac/Linux'ta):

<?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>

Dosya 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>

Dosya 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>

Dosya 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>

Ardından NuGet, çağrıldığı yere bağlı olarak ayarları aşağıdaki gibi yükler ve uygular:

  • 'den disk_drive_1/usersçağrıldı: üzerinde bulunan disk_drive_1tek dosya olduğundan, yalnızca kullanıcı düzeyi yapılandırma dosyasında (A) listelenen varsayılan depo kullanılır.

  • veyadisk_drive_/tmp öğesinden disk_drive_2/ çağrılır: Önce kullanıcı düzeyi dosyası (A) yüklenir, ardından NuGet köküne disk_drive_2 gider ve dosyayı (B) bulur. NuGet içinde /tmp bir yapılandırma dosyası da arar ancak bu dosyayı bulamaz. Sonuç olarak, üzerindeki nuget.org varsayılan depo kullanılır, paket geri yükleme etkinleştirilir ve paketler içinde disk_drive_2/tmpgenişletilir.

  • veyadisk_drive_2/Project1/Source öğesinden disk_drive_2/Project1 çağrılır: Önce kullanıcı düzeyi dosyası (A) yüklenir, ardından NuGet dosyasını (B) kökünden disk_drive_2ve ardından dosya (C) yükler. (C) içindeki Ayarlar , (B) ve (A) içindekileri geçersiz kılar; bu nedenle paketlerin repositoryPath yüklendiği yer yerine disk_drive_2/tmpolurdisk_drive_2/Project1/External/Packages. Ayrıca , (C) öğesini temizlediğinden <packageSources>nuget.org artık yalnızca https://MyPrivateRepo/ES/nugetkaynak olarak kullanılamaz.

  • veya disk_drive_2/Project2/Source: disk_drive_2/Project2 Kullanıcı düzeyi dosyası (A) önce yüklenir ve ardından dosya (B) ve dosya (D) eklenir. TemizlenmediğindenpackageSources, hem hem https://MyPrivateRepo/DQ/nuget de nuget.org kaynak olarak kullanılabilir. Paketler (B) içinde disk_drive_2/tmp belirtildiği gibi içinde genişletildi.

Ek kullanıcı genelinde yapılandırma

NuGet, 5.7'den başlayarak ek kullanıcı çapında yapılandırma dosyaları için destek eklemiştir. Bu, üçüncü taraf satıcıların yükseltme olmadan ek kullanıcı yapılandırma dosyaları eklemesine olanak tanır. Bu yapılandırma dosyaları, bir config alt klasör içindeki standart kullanıcı genelindeki yapılandırma klasöründe bulunur. veya .Config ile .config biten tüm dosyalar dikkate alınır. Bu dosyalar standart araçlar tarafından düzenlenemez.

İşletim Sistemi Platformu Ek Yapılandırmalar
Windows %appdata%\NuGet\config\*.Config
Mac/Linux ~/.config/NuGet/config/*.config veya ~/.nuget/config/*.config

NuGet varsayılanları dosyası

Dosya, paketlerin NuGetDefaults.Config yüklendiği ve güncelleştirildiği paket kaynaklarını belirtmek ve ile nuget pushpaketleri yayımlamak için varsayılan hedefi denetlemek için vardır. Yöneticiler tutarlı dosyaları geliştiriciye ve derleme makinelerine rahatça dağıtabildiğinden NuGetDefaults.Config (örneğin, Grup İlkesi kullanarak) kuruluştaki herkesin nuget.org yerine doğru paket kaynaklarını kullanmasını sağlayabilirler.

Önemli

Dosya NuGetDefaults.Config hiçbir zaman bir paket kaynağının geliştiricinin NuGet yapılandırmasından kaldırılmasına neden olmaz. Başka bir deyişle, geliştirici NuGet'i zaten kullandıysa ve bu nedenle nuget.org paket kaynağını kaydettiyse, dosya NuGetDefaults.Config oluşturulduktan sonra kaldırılmaz.

Ayrıca NuGet'teki diğer NuGetDefaults.Config mekanizmalar da nuget.org gibi paket kaynaklarına erişimi engelleyebilir. Bir kuruluş bu tür erişimi engellemek istiyorsa, bunu yapmak için güvenlik duvarları gibi başka araçlar kullanması gerekir.

NuGetDefaults.Config Konum

Aşağıdaki tabloda, hedef işletim sistemine bağlı olarak dosyanın nerede NuGetDefaults.Config depolanması gerektiği açıklanmaktadır:

İşletim Sistemi Platformu NuGetDefaults.Config Konum
Windows Visual Studio 2017 veya NuGet 4.x+:%ProgramFiles(x86)%\NuGet
Visual Studio 2015 ve öncesi veya NuGet 3.x ve öncesi:%PROGRAMDATA%\NuGet
Mac/Linux $XDG_DATA_HOME (genellikle ~/.local/share veya /usr/local/share, işletim sistemi dağıtımına bağlı olarak)

NuGetDefaults.Config ayarları

  • packageSources: Bu koleksiyon, normal yapılandırma dosyalarındakiyle aynı anlama packageSources sahiptir ve varsayılan kaynakları belirtir. NuGet, yönetim biçimini kullanarak packages.config projelerde paketleri yüklerken veya güncelleştirirken kaynakları sırayla kullanır. PackageReference biçimini kullanan projeler için NuGet, yapılandırma dosyalarındaki sıraylan bağımsız olarak önce yerel kaynakları, ardından ağ paylaşımlarındaki kaynakları, ardından HTTP kaynaklarını kullanır. NuGet, geri yükleme işlemleriyle kaynakların sırasını her zaman yoksayar.

  • disabledPackageSources: Bu koleksiyon, dosyalarda NuGet.Config bulunan ve etkilenen her kaynağın adına göre listelendiği ve devre dışı bırakılıp bırakılmadığını belirten bir true/false değere sahip olduğu anlamına da sahiptir. Bu, kaynak adın ve URL'nin varsayılan olarak açık olmadan içinde packageSources kalmasına olanak tanır. Ardından tek tek geliştiriciler, doğru URL'yi yeniden bulmak zorunda kalmadan kaynağın değerini false diğer NuGet.Config dosyalarda olarak ayarlayarak kaynağı yeniden etkinleştirebilir. Bu, geliştiricilere kuruluş için iç kaynak URL'lerinin tam listesini sağlarken varsayılan olarak yalnızca tek bir ekibin kaynağını etkinleştirmek için de yararlıdır.

  • defaultPushSource: yerleşik varsayılanını geçersiz kılarak işlemler için nuget push varsayılan nuget.orghedefi belirtir. Yönetici istrator'lar, geliştiricilerin üzerinde yayımlamak için özel olarak kullanması nuget push -Source gerektiğinden iç paketlerin yanlışlıkla genele nuget.org yayımlanmasını önlemek için nuget.orgbu ayarı dağıtabilir.

Örnek NuGetDefaults.Config ve uygulama

<?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>