Typowe konfiguracje narzędzia NuGet
Zachowanie narzędzia NuGet jest spowodowane przez skumulowane ustawienia w co najmniej jednym NuGet.Config
pliku (XML), które mogą istnieć w rozwiązaniu — (projekt, jeśli nie jest używane rozwiązanie), poziomach użytkownika i komputera. Plik globalny NuGetDefaults.Config
konfiguruje również źródła pakietów. Ustawienia mają zastosowanie do wszystkich poleceń wydanych w interfejsie wiersza polecenia, konsoli Menedżer pakietów i interfejsu użytkownika Menedżer pakietów.
Konfigurowanie lokalizacji plików i zastosowań
Scope | Lokalizacja pliku NuGet.Config |
opis |
---|---|---|
Rozwiązanie | Bieżący folder (folder rozwiązania) lub dowolny folder do katalogu głównego dysku. | W folderze rozwiązania ustawienia mają zastosowanie do wszystkich projektów w podfolderach. Należy pamiętać, że jeśli plik konfiguracji zostanie umieszczony w folderze projektu, nie ma wpływu na ten projekt. Podczas przywracania projektu w wierszu polecenia katalog projektu jest traktowany jako katalog rozwiązania, co może prowadzić do różnic w zachowaniu podczas przywracania projektu a rozwiązaniem. |
User | Windows:%appdata%\NuGet\NuGet.Config Mac/Linux: ~/.config/NuGet/NuGet.Config lub ~/.nuget/NuGet/NuGet.Config (różni się w zależności od narzędzi) Dodatkowe konfiguracje są obsługiwane na wszystkich platformach. Tych konfiguracji nie można edytować za pomocą narzędzi. Windows: %appdata%\NuGet\config\*.Config Mac/Linux: ~/.config/NuGet/config/*.config lub ~/.nuget/config/*.config |
Ustawienia mają zastosowanie do wszystkich operacji, ale są zastępowane przez dowolne ustawienia na poziomie rozwiązania. |
Komputer | Windows:%ProgramFiles(x86)%\NuGet\Config Mac/Linux: /etc/opt/NuGet/Config (Linux) lub /Library/Application Support (Mac) domyślnie. Jeśli $NUGET_COMMON_APPLICATION_DATA wartość nie ma wartości null ani nie jest pusta, $NUGET_COMMON_APPLICATION_DATA/NuGet/Config zamiast tego |
Ustawienia mają zastosowanie do wszystkich operacji na komputerze, ale są zastępowane przez ustawienia na poziomie użytkownika lub rozwiązania. |
Uwaga
W systemie Mac/Linux lokalizacja pliku konfiguracji użytkownika różni się w zależności od narzędzi. Interfejs wiersza polecenia platformy .NET używa ~/.nuget/NuGet
folderu, a mono używa ~/.config/NuGet
folderu.
W systemie Mac/Linux lokalizacja pliku konfiguracji na poziomie użytkownika różni się w zależności od narzędzi
W systemie Mac/Linux lokalizacja pliku konfiguracji użytkownika różni się w zależności od narzędzi.
Większość użytkowników korzysta z narzędzi, które szukają pliku konfiguracji użytkownika w folderze ~/.nuget/NuGet
.
Te inne narzędzia szukają pliku konfiguracji użytkownika w folderze ~/.config/NuGet
:
- Mono
- NuGet.exe
- Visual Studio 2019 dla komputerów Mac (i starsze wersje)
- Program Visual Studio 2022 dla komputerów Mac (i jego nowsze wersje) działa tylko podczas pracy nad klasycznymi projektami Mono.
Jeśli używane narzędzia obejmują obie lokalizacje, rozważ ich skonsolidowanie, wykonując następujące kroki, aby umożliwić pracę tylko z jednym plikiem konfiguracji na poziomie użytkownika:
- Sprawdź zawartość dwóch plików konfiguracji na poziomie użytkownika i zachowaj odpowiedni plik w
~/.nuget/NuGet
folderze. - Ustaw łącze symboliczne z
~/.nuget/NuGet
na~/.config/NuGet
. Na przykład uruchom polecenie powłoki bash:ln -s ~/.nuget/NuGet ~/.config/NuGet
.
Uwagi dotyczące wcześniejszych wersji pakietu NuGet:
- Program NuGet 3.3 i starsze wersje używał
.nuget
folderu dla ustawień obejmujących całe rozwiązanie. Ten folder nie jest używany w programie NuGet 3.4 lub nowszym. - W przypadku pakietów NuGet od 2.6 do 3.x plik konfiguracji na poziomie komputera w systemie Windows znajdował się w
%ProgramData%\NuGet\Config[\{IDE}[\{Version}[\{SKU}]]]\NuGet.Config
lokalizacji , gdzie{IDE}
może być{Version}
VisualStudio
wersją programu Visual Studio, taką jak14.0
, i{SKU}
maCommunity
wartość ,Pro
lubEnterprise
. Aby przeprowadzić migrację ustawień do pakietu NuGet 4.0 lub nowszego, po prostu skopiuj plik konfiguracji do%ProgramFiles(x86)%\NuGet\Config
. W systemie Linux poprzednia lokalizacja to/etc/opt
, i na komputerze Mac./Library/Application Support
Zmienianie ustawień konfiguracji
Plik NuGet.Config
jest prostym plikiem tekstowym XML zawierającym pary klucz/wartość zgodnie z opisem w temacie Ustawienia Konfiguracji NuGet.
Ustawienia są zarządzane przy użyciu polecenia konfiguracji interfejsu wiersza polecenia NuGet:
- Domyślnie zmiany są wprowadzane do pliku konfiguracji na poziomie użytkownika. (W systemie Mac/Linux lokalizacja pliku konfiguracji na poziomie użytkownika różni się w zależności od narzędzi)
- Aby zmienić ustawienia w innym pliku, użyj przełącznika
-configFile
. W takim przypadku pliki mogą używać dowolnej nazwy pliku. - Klucze są zawsze uwzględniane wielkości liter.
- Podniesienie uprawnień jest wymagane do zmiany ustawień w pliku ustawień na poziomie komputera.
Ostrzeżenie
Mimo że plik można zmodyfikować w dowolnym edytorze tekstów, NuGet (wersja 3.4.3 lub nowsza) dyskretnie ignoruje cały plik konfiguracji, jeśli zawiera źle sformułowany kod XML (niedopasowane tagi, nieprawidłowe znaki cudzysłowu itp.). Dlatego preferowane jest zarządzanie ustawieniem przy użyciu polecenia nuget config
.
Ustawianie wartości
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
Uwaga
W programie NuGet 3.4 lub nowszym można używać zmiennych środowiskowych w dowolnej wartości, tak jak w systemach repositoryPath=%PACKAGEHOME%
(Windows) i repositoryPath=$PACKAGEHOME
(Mac/Linux).
Usuwanie wartości
Aby usunąć wartość, określ klucz z pustą wartością.
# Windows
nuget config -set repositoryPath= -configfile c:\my.Config
# Mac/Linux
nuget config -set repositoryPath= -configfile /home/my.Config
Tworzenie nowego pliku konfiguracji
Skopiuj poniższy szablon do nowego pliku, a następnie użyj polecenia nuget config -configFile <filename>
, aby ustawić wartości:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
</configuration>
Jak są stosowane ustawienia
Wiele NuGet.Config
plików umożliwia przechowywanie ustawień w różnych lokalizacjach, tak aby były stosowane do jednego rozwiązania lub grupy rozwiązań.
Te ustawienia są stosowane zbiorczo do dowolnej operacji NuGet wywoływanej z wiersza polecenia lub programu Visual Studio z ustawieniami istniejącymi "najbliżej" rozwiązania lub bieżącego folderu, które mają pierwszeństwo.
Jeśli narzędzie wiersza polecenia jest używane w pliku projektu, a nie w pliku rozwiązania, katalog projektu jest używany jako "katalog rozwiązania", co może prowadzić do niespójnego zachowania, gdy plik znajduje NuGet.Config
się w podkatalogu pliku rozwiązania.
W szczególności pakiet NuGet ładuje ustawienia z różnych plików konfiguracji w następującej kolejności:
NuGetDefaults.Config
Plik, który zawiera ustawienia związane tylko ze źródłami pakietów.- Plik na poziomie komputera.
- Plik na poziomie użytkownika.
- Plik określony za pomocą
-configFile
polecenia . - Pliki znalezione w każdym folderze w ścieżce z katalogu głównego dysku do bieżącego folderu (gdzie
nuget.exe
jest wywoływane lub folder zawierający rozwiązanie programu Visual Studio). Na przykład jeśli polecenie jest wywoływane wc:\A\B\C
programie , NuGet wyszukuje i ładuje pliki konfiguracji wc:\
pliku , ,c:\A
, ic:\A\B
na koniecc:\A\B\C
.
Ponieważ program NuGet znajduje ustawienia w tych plikach, są one stosowane w następujący sposób:
- W przypadku elementów pojedynczego elementu pakiet NuGet zamienił dowolną wcześniej znalezioną wartość dla tego samego klucza. Oznacza to, że ustawienia znajdujące się "najbliżej" bieżącego folderu lub rozwiązania zastępują wszystkie inne znalezione wcześniej. Na przykład ustawienie w
NuGetDefaults.Config
pliku jest zastępowane,defaultPushSource
jeśli istnieje w innym pliku konfiguracji. - W przypadku elementów kolekcji (takich jak
<packageSources>
), NuGet łączy wartości ze wszystkich plików konfiguracji w jedną kolekcję. - Gdy
<clear />
jest obecny dla danego węzła, NuGet ignoruje wcześniej zdefiniowane wartości konfiguracji dla tego węzła.
Napiwek
nuget.config
Dodaj plik w katalogu głównym repozytorium rozwiązania. Jest to najlepsze rozwiązanie, ponieważ promuje powtarzalność i zapewnia, że różni użytkownicy mają tę samą konfigurację NuGet.
przewodnik po Ustawienia
Załóżmy, że masz następującą strukturę folderów na dwóch oddzielnych dyskach:
disk_drive_1
User
disk_drive_2
Project1
Source
Project2
Source
tmp
Następnie masz cztery NuGet.Config
pliki w następujących lokalizacjach z daną zawartością. (Plik na poziomie komputera nie jest uwzględniony w tym przykładzie, ale zachowuje się podobnie do pliku na poziomie użytkownika).
Plik A. Plik na poziomie użytkownika, (%appdata%\NuGet\NuGet.Config
w systemie Windows, ~/.config/NuGet/NuGet.Config
na komputerze 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>
Plik 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>
Plik 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>
Plik 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>
Narzędzie NuGet następnie ładuje i stosuje ustawienia w następujący sposób, w zależności od tego, gdzie jest wywoływany:
Wywoływane z
disk_drive_1/users
programu : używane jest tylko domyślne repozytorium wymienione w pliku konfiguracji na poziomie użytkownika (A), ponieważ jest to jedyny plik znaleziony w plikudisk_drive_1
.Wywoływany z
disk_drive_2/
pliku lubdisk_drive_/tmp
: Plik na poziomie użytkownika (A) jest najpierw ładowany, a następnie nuGet przechodzi do katalogu głównegodisk_drive_2
i znajduje plik (B). NuGet wyszukuje również plik konfiguracji w pliku/tmp
, ale go nie znajduje. W związku z tym jest używane domyślne repozytoriumnuget.org
, przywracanie pakietów jest włączone, a pakiety są rozszerzane w programiedisk_drive_2/tmp
.Wywoływany z
disk_drive_2/Project1
lubdisk_drive_2/Project1/Source
: Plik na poziomie użytkownika (A) jest ładowany najpierw, a następnie NuGet ładuje plik (B) z katalogu głównegodisk_drive_2
, a następnie plik (C). Ustawienia w (C) zastępuje te wartości w (B) i (A), więcrepositoryPath
miejsce, w którym pakiety są instalowane, todisk_drive_2/Project1/External/Packages
zamiastdisk_drive_2/tmp
. Ponadto, ponieważ (C) czyści<packageSources>
, nuget.org nie jest już dostępny jako źródło pozostawiając tylkohttps://MyPrivateRepo/ES/nuget
.Wywoływany z
disk_drive_2/Project2
pliku lubdisk_drive_2/Project2/Source
: Plik na poziomie użytkownika (A) jest ładowany najpierw, a następnie plik (B) i plik (D). PonieważpackageSources
nie jest czyszczone, obanuget.org
ihttps://MyPrivateRepo/DQ/nuget
są dostępne jako źródła. Pakiety są rozszerzane wdisk_drive_2/tmp
sposób określony w (B).
Dodatkowa konfiguracja dla całego użytkownika
Począwszy od wersji 5.7, pakiet NuGet dodał obsługę dodatkowych plików konfiguracji dla całego użytkownika. Dzięki temu dostawcy innych firm mogą dodawać dodatkowe pliki konfiguracji użytkownika bez podniesienia uprawnień.
Te pliki konfiguracji znajdują się w folderze konfiguracji całego użytkownika standardowego config
w podfolderze.
Wszystkie pliki kończące się na .config
lub .Config
będą brane pod uwagę.
Tych plików nie można edytować przy użyciu standardowych narzędzi.
Platforma systemu operacyjnego | Dodatkowe konfiguracje |
---|---|
Windows | %appdata%\NuGet\config\*.Config |
System Mac/Linux | ~/.config/NuGet/config/*.config lub ~/.nuget/config/*.config |
Plik domyślny nuGet
Plik NuGetDefaults.Config
istnieje, aby określić źródła pakietów, z których pakiety są instalowane i aktualizowane, oraz kontrolować domyślny element docelowy dla pakietów publikowania za pomocą polecenia nuget push
. Ponieważ administratorzy mogą wygodnie (na przykład za pomocą zasad grupy) wdrażać spójne NuGetDefaults.Config
pliki na maszynach deweloperskich i kompilacji, mogą mieć pewność, że wszyscy w organizacji korzystają z odpowiednich źródeł pakietów, a nie nuget.org.
Ważne
Plik NuGetDefaults.Config
nigdy nie powoduje usunięcia źródła pakietu z konfiguracji NuGet dewelopera. Oznacza to, że jeśli deweloper użył już pakietu NuGet i w związku z tym ma zarejestrowane źródło pakietu nuget.org, nie zostanie on usunięty po utworzeniu NuGetDefaults.Config
pliku.
Ponadto ani NuGetDefaults.Config
żaden inny mechanizm w pakiecie NuGet nie może uniemożliwić dostępu do źródeł pakietów, takich jak nuget.org. Jeśli organizacja chce zablokować taki dostęp, musi użyć innych środków, takich jak zapory, aby to zrobić.
NuGetDefaults.Config
Lokalizacji
W poniższej tabeli opisano miejsce NuGetDefaults.Config
przechowywania pliku w zależności od docelowego systemu operacyjnego:
Platforma systemu operacyjnego | NuGetDefaults.Config Lokalizacji |
---|---|
Windows | Visual Studio 2017 lub NuGet 4.x+:%ProgramFiles(x86)%\NuGet Programy Visual Studio 2015 i starsze lub NuGet 3.x i starsze: %PROGRAMDATA%\NuGet |
System Mac/Linux | $XDG_DATA_HOME (zazwyczaj ~/.local/share lub /usr/local/share , w zależności od dystrybucji systemu operacyjnego) |
Ustawienia narzędzia NuGetDefaults.Config
packageSources
: ta kolekcja ma takie samo znaczenie jakpackageSources
w zwykłych plikach konfiguracji i określa domyślne źródła. Narzędzie NuGet używa źródeł w kolejności podczas instalowania lub aktualizowania pakietów w projektach przy użyciupackages.config
formatu zarządzania. W przypadku projektów korzystających z formatu PackageReference program NuGet najpierw używa lokalnych źródeł, a następnie źródeł w udziałach sieciowych, a następnie źródeł HTTP, niezależnie od kolejności w plikach konfiguracji. NuGet zawsze ignoruje kolejność źródeł przy użyciu operacji przywracania.disabledPackageSources
: ta kolekcja ma również takie samo znaczenie jak wNuGet.Config
plikach, gdzie każde źródło, którego dotyczy problem, jest wymienione według jego nazwy itrue
/false
wartości wskazującej, czy jest wyłączona. Dzięki temu nazwa źródła i adres URL mogą pozostać bezpackageSources
włączenia go domyślnie. Następnie indywidualni deweloperzy mogą ponownie włączyć źródło, ustawiając wartość źródła nafalse
wartość w innychNuGet.Config
plikach bez konieczności ponownego znajdowania poprawnego adresu URL. Jest to również przydatne w przypadku dostarczania deweloperom pełnej listy wewnętrznych adresów URL źródłowych dla organizacji przy jednoczesnym domyślnie włączeniu źródła tylko pojedynczego zespołu.defaultPushSource
: określa domyślny element docelowy dlanuget push
operacji, przesłaniając wbudowaną wartość domyślną .nuget.org
Administracja istratorzy mogą wdrożyć to ustawienie, aby uniknąć przypadkowego publikowania wewnętrznych pakietów do publicznej wiadomościnuget.org
, ponieważ deweloperzy muszą używać ich donuget push -Source
publikowania wnuget.org
programie .
Przykład nuGetDefaults.Config i aplikacja
<?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>
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla