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:
- Zkontrolujte obsah dvou konfiguračních souborů na úrovni uživatele a ponechte ten, který chcete mít ve
~/.nuget/NuGet
složce. - 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ýtVisualStudio
,{Version}
byl verzí sady Visual Studio, například14.0
, a{SKU}
je buďCommunity
,Pro
neboEnterprise
. Pokud chcete migrovat nastavení na NuGet 4.0+, jednoduše zkopírujte konfigurační soubor do%ProgramFiles(x86)%\NuGet\Config
souboru . V Linuxu bylo/etc/opt
toto 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 nugetconfig
pří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í:
- (Méně časté) Soubor
NuGetDefaults.Config
, který obsahuje nastavení související pouze se zdroji balíčků. - Soubor na úrovni počítače.
- Soubor na úrovni uživatele.
- 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ánc:\A\B\C
příkaz , NuGet hledá a načte konfigurační soubory vc:\
, pak , pakc:\A
c:\A\B
a nakonecc:\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.config
se použijí pouze nastavení ze zadaného souboru.
Když NuGet najde nastavení v těchto souborech, použijí se takto:
- 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. - Pro prvky kolekce (například
<packageSources>
) NuGet kombinuje hodnoty ze všech konfiguračních souborů do jedné kolekce. - 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, nadisk_drive_1
který se nachází .Vyvoláno z
disk_drive_2/
nebodisk_drive_/tmp
: Soubor na úrovni uživatele (A) se nejprve načte, pak NuGet přejde do kořenovéhodisk_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
nebodisk_drive_2/Project1/Source
: Soubor na úrovni uživatele (A) se nejprve načte, pak NuGet načte soubor (B) z kořenovéhodisk_drive_2
adresáře a potom soubor (C). Nastavení v (C) přepíší ty v (B) a (A), takžerepositoryPath
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í pouzehttps://MyPrivateRepo/ES/nuget
.Vyvoláno z
disk_drive_2/Project2
nebodisk_drive_2/Project2/Source
: Soubor na úrovni uživatele (A) se nejprve načte za souborem (B) a souborem (D). Vzhledem k tomupackageSources
, že není vymazáno, oběnuget.org
ahttps://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/share v závislosti na distribuci operačního systému) |
Nastavení NuGetDefaults.Config
packageSources
: Tato kolekce má stejný význam jakopackageSources
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 vNuGet.Config
souborech, kde je každý ovlivněný zdroj uveden podle názvu atrue
/false
hodnota označující, jestli je zakázaný. To umožňuje, aby název zdroje a adresa URL zůstaly vepackageSources
výchozím nastavení zapnuté. Jednotliví vývojáři pak můžou zdroj znovu povolit tak, že nastaví hodnotu zdroje dofalse
jinýchNuGet.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 pronuget push
operace, přepsání předdefinované výchozí hodnotynuget.org
. Správci můžou toto nastavení nasadit, aby se zabránilo náhodnému publikování interních balíčků veřejnostinuget.org
, protože vývojáři je třeba použítnuget push -Source
k publikování donuget.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>