Běžné konfigurace NuGetu

Chování NuGetu je řízeno kumulovanými nastaveními v jednom nebo více souborech konfigurace (XML), které mohou existovat v řešení – (projekt, pokud se nepoužívá žádné řešení), uživatelské a počítačové úrovně.

Umístění a použití konfiguračních souborů

Obor Umístění souboru NuGet.Config Popis
Řešení Aktuální složka (neboli složka Řešení) nebo libovolná složka až do kořenového adresáře jednotky. Ve složce řešení platí nastavení pro všechny projekty v podsložkách. Všimněte si, že pokud je konfigurační soubor umístěný ve složce projektu, nemá na tento projekt žádný vliv. Při obnovování projektu na příkazovém řádku se adresář projektu považuje za adresář řešení, což může vést k rozdílům v chování při obnovování projektu vs.
Uživatelská Windows: %appdata%\NuGet\NuGet.Config
Mac/Linux: ~/.config/NuGet/NuGet.Config nebo ~/.nuget/NuGet/NuGet.Config (liší se podle nástrojů)
Na všech platformách se podporují další konfigurace. Tyto konfigurace nelze upravit pomocí nástrojů.
Windows: %appdata%\NuGet\config\*.Config
Mac/Linux: ~/.config/NuGet/config/*.config nebo ~/.nuget/config/*.config
Nastavení platí pro všechny operace, ale jsou přepsána všemi nastaveními na úrovni řešení.
Počítač Windows: %ProgramFiles(x86)%\NuGet\Config
Mac/Linux: /etc/opt/NuGet/Config (Linux) nebo /Library/Application Support (Mac) ve výchozím nastavení. Pokud $NUGET_COMMON_APPLICATION_DATA není null ani prázdný, pak $NUGET_COMMON_APPLICATION_DATA/NuGet/Config místo toho
Nastavení platí pro všechny operace v počítači, ale přepíše se všemi nastaveními na úrovni uživatele nebo řešení.

Poznámka:

V systému Mac/Linux se umístění konfiguračního souboru uživatele liší podle nástrojů. .NET CLI používá ~/.nuget/NuGet složku, zatímco Mono používá ~/.config/NuGet složku.

V systému Mac/Linux se umístění konfiguračního souboru na úrovni uživatele liší podle nástrojů.

V systému Mac/Linux se umístění konfiguračního souboru uživatele liší podle nástrojů. Většina uživatelů používá nástroje, které hledají konfigurační soubor uživatele ve ~/.nuget/NuGet složce. Tyto další nástroje vyhledá konfigurační soubor uživatele ve ~/.config/NuGet složce:

  • Mono
  • NuGet.exe
  • Visual Studio 2019 pro Mac (a starší verze)
  • Visual Studio 2022 pro Mac (a novější verze) pouze při práci na klasických projektech Mono.

Pokud nástroje, které používáte, zahrnují obě umístění, zvažte jejich sloučení pomocí následujících kroků, abyste mohli pracovat pouze s jedním konfiguračním souborem na úrovni uživatele:

  1. Zkontrolujte obsah dvou konfiguračních souborů na úrovni uživatele a ponechte ten, který chcete mít ve ~/.nuget/NuGet složce.
  2. Nastavit symbolický odkaz z ~/.nuget/NuGet na ~/.config/NuGet. Například spustit příkaz bash: ln -s ~/.nuget/NuGet ~/.config/NuGet.

Poznámky ke starším verzím NuGetu:

  • NuGet 3.3 a starší používal .nuget složku pro nastavení celého řešení. Tato složka se v NuGetu 3.4+nepoužívá.
  • Pro NuGet 2.6 až 3.x byl konfigurační soubor na úrovni počítače ve Windows umístěn v %ProgramData%\NuGet\Config[\{IDE}[\{Version}[\{SKU}]]]\NuGet.Config, kde {IDE} může být VisualStudio, {Version} byl verzí sady Visual Studio, například 14.0, a {SKU} je buď Community, Pronebo Enterprise. Pokud chcete migrovat nastavení na NuGet 4.0+, jednoduše zkopírujte konfigurační soubor do %ProgramFiles(x86)%\NuGet\Configsouboru . V Linuxu bylo /etc/opttoto předchozí umístění a na Macu . /Library/Application Support

Změna nastavení konfigurace

Soubor NuGet.Config je jednoduchý textový soubor XML obsahující páry klíč/hodnota, jak je popsáno v tématu Nastavení konfigurace NuGet.

Nastavení se spravují pomocí konfiguračního příkazu Rozhraní příkazového řádku NuGet:

  • Ve výchozím nastavení se změny v konfiguračním souboru na úrovni uživatele provádějí. (V systému Mac/Linux se umístění konfiguračního souboru na úrovni uživatele liší podle nástrojů)
  • Pokud chcete změnit nastavení v jiném souboru, použijte -configFile přepínač. V takovém případě mohou soubory používat libovolný název souboru.
  • U klíčů se vždy rozlišují malá a velká písmena.
  • Ke změně nastavení v souboru nastavení na úrovni počítače se vyžaduje zvýšení oprávnění.

Upozorňující

I když můžete soubor upravit v libovolném textovém editoru, NuGet (v3.4.3 a novější) bezobslužně ignoruje celý konfigurační soubor, pokud obsahuje poškozený kód XML (neshodované značky, neplatné uvozovky atd.). Proto je vhodnější spravovat nastavení pomocí nuget config.

Nastavení hodnoty

Windows:

# Set globalPackagesFolder in the user-level config file
dotnet nuget config set globalPackagesFolder "C:\packages"

# Set repositoryPath (available for packages.config only) in the user-level config file
dotnet nuget config set repositoryPath "C:\packages"

# Set repositoryPath in solution-level files
dotnet nuget config set repositoryPath "C:\packages" --configfile "C:\my.config"
dotnet nuget config set repositoryPath "c:\packages" --configfile "..\..\my.config"

# Set repositoryPath in the computer-level file (requires elevation)
dotnet nuget config set repositoryPath "c:\packages" --configfile "%appdata%\NuGet\NuGet.Config"

Mac/Linux:

# Set globalPackagesFolder in the user-level config file
dotnet nuget config set globalPackagesFolder /home/packages

# Set repositoryPath (available for packages.config only) in the user-level config file
dotnet nuget config set repositoryPath /home/packages

# Set repositoryPath in solution-level files
dotnet nuget config set repositoryPath /home/projects/packages --configfile /home/my.Config
dotnet nuget config set repositoryPath /home/packages --configfile home/myApp/NuGet.Config

# Set repositoryPath in the computer-level file (requires elevation)
dotnet nuget config set repositoryPath /home/packages --configfile $XDG_DATA_HOME/NuGet.Config

Poznámka:

V NuGetu 3.4 a novějším můžete použít proměnné prostředí v libovolné hodnotě, například v repositoryPath=%PACKAGEHOME% (Windows) a repositoryPath=$PACKAGEHOME (Mac/Linux).

Odebrání hodnoty

Pokud chcete odebrat hodnotu, zadejte klíč s prázdnou hodnotou.

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

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

Vytvoření nového konfiguračního souboru

Spuštěním dotnet new nugetconfigpříkazu .NET CLI vytvořte výchozí soubor nuget.config. Další informace najdete v tématu příkazy rozhraní příkazového řádku dotnet.

Případně ručně zkopírujte následující šablonu do nového souboru a pak použijte nuget config -configFile <filename> k nastavení hodnot:

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

Jak se použijí nastavení

Několik NuGet.Config souborů umožňuje ukládat nastavení do různých umístění, aby se použilo pro jedno řešení nebo skupinu řešení. Tato nastavení se souhrnně vztahují na jakoukoli operaci NuGet vyvolanou z příkazového řádku nebo ze sady Visual Studio s nastavením, která existují "nejblíže" řešení nebo aktuální složce, která mají přednost. Pokud se nástroj příkazového řádku používá v souboru projektu místo souboru řešení, použije se adresář projektu jako "adresář řešení", což může vést k nekonzistentnímu chování, pokud je NuGet.Config soubor v podadresáři souboru řešení.

Konkrétně platí, že pokud není konfigurační soubor explicitně zadán na příkazovém řádku, NuGet načte nastavení z různých konfiguračních souborů v následujícím pořadí:

  1. (Méně časté) SouborNuGetDefaults.Config, který obsahuje nastavení související pouze se zdroji balíčků.
  2. Soubor na úrovni počítače.
  3. Soubor na úrovni uživatele.
  4. Soubory nalezené v každé složce v cestě z kořenového adresáře jednotky do aktuální složky (kde nuget.exe je vyvolána nebo složka obsahující řešení sady Visual Studio). Pokud je například vyvolán c:\A\B\Cpříkaz , NuGet hledá a načte konfigurační soubory v c:\, pak , pak c:\Ac:\A\Ba nakonec c:\A\B\C.

Pokud je konfigurační soubor explicitně zadán na příkazovém řádku, nebo nuget -configFile my.config dotnet restore --configfile my.configse použijí pouze nastavení ze zadaného souboru.

Když NuGet najde nastavení v těchto souborech, použijí se takto:

  1. U elementů s jednou položkou nuGet nahradil všechny dříve nalezené hodnoty stejného klíče. To znamená, že nastavení, která jsou k aktuální složce nebo řešení nejblíže, přepíší všechny ostatní nalezené dříve. Například nastavení je NuGetDefaults.Config přepsáno, defaultPushSource pokud existuje v jakémkoli jiném konfiguračním souboru.
  2. Pro prvky kolekce (například <packageSources>) NuGet kombinuje hodnoty ze všech konfiguračních souborů do jedné kolekce.
  3. Pokud <clear /> je pro daný uzel přítomen, NuGet ignoruje dříve definované hodnoty konfigurace pro daný uzel.

Tip

nuget.config Přidejte soubor do kořenového adresáře úložiště řešení. To je považováno za osvědčený postup, protože podporuje opakovatelnost a zajišťuje, že různí uživatelé mají stejnou konfiguraci NuGet.

Návod k nastavení

Řekněme, že máte následující strukturu složek na dvou samostatných jednotkách:

disk_drive_1
    User
disk_drive_2
    Project1
        Source
    Project2
        Source
    tmp

Pak máte čtyři NuGet.Config soubory v následujících umístěních s daným obsahem. (Soubor na úrovni počítače není v tomto příkladu zahrnutý, ale chová se podobně jako soubor na úrovni uživatele.)

File A. User-level file, (%appdata%\NuGet\NuGet.Config on Windows, ~/.config/NuGet/NuGet.Config on Mac/Linux):

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget" value="https://api.nuget.org/v3/index.json" />
  </packageSources>
</configuration>

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

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

Soubor 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 pak načte a použije nastavení následujícím způsobem v závislosti na tom, kde se vyvolá:

  • Vyvoláno z disk_drive_1/users: Používá se pouze výchozí úložiště uvedené v konfiguračním souboru na úrovni uživatele (A), protože se jedná o jediný soubor, na disk_drive_1který se nachází .

  • Vyvoláno z disk_drive_2/ nebo disk_drive_/tmp: Soubor na úrovni uživatele (A) se nejprve načte, pak NuGet přejde do kořenového disk_drive_2 adresáře a najde soubor (B). NuGet také hledá konfigurační soubor, /tmp ale nenajde ho. V důsledku toho se použije výchozí úložištěnuget.org, povolí se obnovení balíčku a balíčky se rozbalí .disk_drive_2/tmp

  • Vyvoláno z disk_drive_2/Project1 nebo disk_drive_2/Project1/Source: Soubor na úrovni uživatele (A) se nejprve načte, pak NuGet načte soubor (B) z kořenového disk_drive_2adresáře a potom soubor (C). Nastavení v (C) přepíší ty v (B) a (A), takže repositoryPath místo toho, kde se balíčky nainstalují disk_drive_2/Project1/External/Packages disk_drive_2/tmp. Protože (C) vymaže <packageSources>, nuget.org již není k dispozici jako zdroj opouští pouze https://MyPrivateRepo/ES/nuget.

  • Vyvoláno z disk_drive_2/Project2 nebo disk_drive_2/Project2/Source: Soubor na úrovni uživatele (A) se nejprve načte za souborem (B) a souborem (D). Vzhledem k tomu packageSources , že není vymazáno, obě nuget.org a https://MyPrivateRepo/DQ/nuget jsou k dispozici jako zdroje. Balíčky se rozbalí disk_drive_2/tmp , jak je uvedeno v (B).

Další uživatelská konfigurace

Od verze 5.7 přidal NuGet podporu dalších konfiguračních souborů pro celé uživatele. To umožňuje dodavatelům třetích stran přidávat další konfigurační soubory uživatelů bez zvýšení oprávnění. Tyto konfigurační soubory se nacházejí ve standardní složce konfigurace pro celou uživatele v podsložce config . Všechny soubory končící .config nebo .Config budou považovány za. Tyto soubory nelze upravovat standardními nástroji.

Platforma operačního systému Další konfigurace
Windows %appdata%\NuGet\config\*.Config
Mac/Linux ~/.config/NuGet/config/*.config nebo ~/.nuget/config/*.config

Výchozí soubor NuGet

Je NuGetDefaults.Config neobvyklé a může určit pouze zdroje balíčků, ze kterých jsou balíčky nainstalovány a aktualizovány, nebo řídit výchozí cíl pro publikování balíčků s nuget push.

Vzhledem k tomu, že správci můžou pohodlně (pomocí zásad skupiny) nasazovat konzistentní NuGetDefaults.Config soubory pro vývojáře a sestavování počítačů, můžou zajistit, aby všichni uživatelé v organizaci používali konzistentní zdroje balíčků bez ohledu na to, jestli to zahrnuje nuget.org.

Důležité

Soubor NuGetDefaults.Config nikdy nezpůsobí odebrání zdroje balíčku z konfigurace NuGet vývojáře. To znamená, že pokud už vývojář použil NuGet, a proto má zaregistrovaný zdroj balíčku nuget.org, po vytvoření NuGetDefaults.Config souboru se neodebere.

Kromě toho ani NuGetDefaults.Config žádný jiný mechanismus v NuGetu nemůže zabránit přístupu ke zdrojům balíčků, jako je nuget.org. Pokud chce organizace takový přístup blokovat, musí k tomu použít jiné prostředky, jako jsou brány firewall.

NuGetDefaults.Config umístění

Následující tabulka popisuje, kam NuGetDefaults.Config se má soubor uložit v závislosti na cílovém operačním systému:

Platforma operačního systému NuGetDefaults.Config Umístění
Windows Visual Studio 2017 nebo NuGet 4.x+: %ProgramFiles(x86)%\NuGet
Visual Studio 2015 a starší nebo NuGet 3.x a starší: %PROGRAMDATA%\NuGet
Mac/Linux $XDG_DATA_HOME (obvykle ~/.local/share nebo /usr/local/sharev závislosti na distribuci operačního systému)

Nastavení NuGetDefaults.Config

  • packageSources: Tato kolekce má stejný význam jako packageSources v běžných konfiguračních souborech a určuje výchozí zdroje. NuGet používá zdroje v pořadí při instalaci nebo aktualizaci balíčků v projektech pomocí packages.config formátu správy. Pro projekty používající formát PackageReference používá NuGet nejprve místní zdroje, pak zdroje v síťových sdílených složkách, pak zdroje HTTP bez ohledu na pořadí v konfiguračních souborech. NuGet vždy ignoruje pořadí zdrojů s operacemi obnovení.

  • disabledPackageSources: Tato kolekce má stejný význam jako v NuGet.Config souborech, kde je každý ovlivněný zdroj uveden podle názvu a true/false hodnota označující, jestli je zakázaný. To umožňuje, aby název zdroje a adresa URL zůstaly ve packageSources výchozím nastavení zapnuté. Jednotliví vývojáři pak můžou zdroj znovu povolit tak, že nastaví hodnotu zdroje do false jiných NuGet.Config souborů, aniž by museli znovu najít správnou adresu URL. To je také užitečné, když vývojářům poskytnete úplný seznam interních zdrojových adres URL pro organizaci a ve výchozím nastavení povolíte jenom zdroj jednotlivých týmů.

  • defaultPushSource: určuje výchozí cíl pro nuget push operace, přepsání předdefinované výchozí hodnoty nuget.org. Správci můžou toto nastavení nasadit, aby se zabránilo náhodnému publikování interních balíčků veřejnosti nuget.org , protože vývojáři je třeba použít nuget push -Source k publikování do nuget.org.

Příklad NuGetDefaults.Config a aplikace

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