Delen via


Algemene NuGet-configuraties

Het gedrag van NuGet wordt aangestuurd door de verzamelde instellingen in een of meer config-bestanden (XML) die op het niveau van een oplossing (project als er geen oplossing wordt gebruikt), en op gebruikers- en computerniveau kunnen bestaan.

Locaties en toepassingen van configuratiebestanden

Scope NuGet.Config bestandslocatie Description
Solution Huidige map (ook wel oplossingsdirectory genoemd) of een map tot aan de hoofddirectory van de schijf. In een oplossingsmap zijn instellingen van toepassing op alle projecten in submappen. Houd er rekening mee dat als een configuratiebestand in een projectmap wordt geplaatst, dit geen effect heeft op dat project. Bij het herstellen van een project op de opdrachtregel wordt de map van het project behandeld als de oplossingsmap, wat kan leiden tot verschillen in gedrag bij het herstellen van het project versus de oplossing.
User Windows:%appdata%\NuGet\NuGet.Config
Mac/Linux:~/.config/NuGet/NuGet.Config of ~/.nuget/NuGet/NuGet.Config (verschilt per hulpprogramma)
Aanvullende configuraties worden ondersteund op alle platforms. Deze configuraties kunnen niet worden bewerkt door de hulpprogramma's.
Ramen:%appdata%\NuGet\config\*.Config
Mac/Linux:~/.config/NuGet/config/*.config of ~/.nuget/config/*.config
Instellingen zijn van toepassing op alle bewerkingen, maar worden overschreven door instellingen op oplossingsniveau.
Computer Windows:%ProgramFiles(x86)%\NuGet\Config
Mac/Linux:/etc/opt/NuGet/Config (Linux) of /Library/Application Support (Mac) standaardinstelling. Als $NUGET_COMMON_APPLICATION_DATA niet null of leeg is, gebruik dan $NUGET_COMMON_APPLICATION_DATA/NuGet/Config in plaats daarvan
Instellingen zijn van toepassing op alle bewerkingen op de computer, maar worden overschreven door instellingen op gebruikers- of oplossingsniveau.

Opmerking

Op Mac/Linux varieert de locatie van het gebruikersconfiguratiebestand per hulpprogramma. .NET CLI maakt gebruik van ~/.nuget/NuGet de map, terwijl Mono gebruikmaakt van ~/.config/NuGet de map.

Op Mac/Linux varieert de locatie van het configuratiebestand op gebruikersniveau per hulpprogramma

Op Mac/Linux varieert de locatie van het gebruikersconfiguratiebestand per hulpprogramma. De meeste gebruikers gebruiken hulpprogramma's die zoeken naar het gebruikersconfiguratiebestand onder de ~/.nuget/NuGet map. Deze andere hulpprogramma's zoeken naar het configuratiebestand van de gebruiker onder de ~/.config/NuGet map:

  • Mono
  • NuGet.exe
  • Visual Studio 2019 voor Mac (en eerdere versies)
  • Visual Studio 2022 voor Mac (en latere versies), alleen wanneer u werkt aan klassieke Mono-projecten.

Als de hulpprogramma's die u gebruikt beide locaties omvat, kunt u overwegen om ze te consolideren door deze stappen uit te voeren, zodat u met slechts één configuratiebestand op gebruikersniveau kunt werken:

  1. Controleer de inhoud van de twee configuratiebestanden op gebruikersniveau en behoud de gewenste map ~/.nuget/NuGet .
  2. Symbolische koppeling instellen van ~/.nuget/NuGet naar ~/.config/NuGet. Bijvoorbeeld Bash-opdracht uitvoeren: ln -s ~/.nuget/NuGet ~/.config/NuGet.

Opmerkingen voor eerdere versies van NuGet:

  • NuGet 3.3 en eerder gebruikten een .nuget map voor instellingen voor de hele oplossing. Deze map wordt niet gebruikt in NuGet 3.4+.
  • Voor NuGet 2.6 tot en met 3.x bevindt het configuratiebestand op computerniveau in Windows zich in %ProgramData%\NuGet\Config[\{IDE}[\{Version}[\{SKU}]]]\NuGet.Config, waar {IDE} dat kan zijn VisualStudio, {Version} was de Visual Studio-versie zoals 14.0, en {SKU} is Community, Proof Enterprise. Als u instellingen wilt migreren naar NuGet 4.0+, kopieert u het configuratiebestand naar %ProgramFiles(x86)%\NuGet\Config. Op Linux was /etc/optdeze vorige locatie, en op Mac, /Library/Application Support.

Configuratie-instellingen wijzigen

Een NuGet.Config bestand is een eenvoudig XML-tekstbestand met sleutel-waardeparen, zoals beschreven in het onderwerp Configuratie-instellingen voor NuGet .

Instellingen worden beheerd met behulp van de NuGet CLI-configuratieopdracht:

  • Standaard worden wijzigingen aangebracht in het configuratiebestand op gebruikersniveau. (Op Mac/Linux varieert de locatie van het configuratiebestand op gebruikersniveau per hulpprogramma)
  • Als u instellingen in een ander bestand wilt wijzigen, gebruikt u de -configFile schakeloptie. In dit geval kunnen bestanden elke bestandsnaam gebruiken.
  • Sleutels zijn altijd hoofdlettergevoelig.
  • Benodigde bevoegdheden zijn vereist voor het wijzigen van instellingen in het bestand met instellingen op computerniveau.

Waarschuwing

Hoewel u het bestand in een teksteditor kunt wijzigen, negeert NuGet (v3.4.3 en hoger) het hele configuratiebestand op de achtergrond als het ongeldige XML-bestand bevat (niet-overeenkomende tags, ongeldige aanhalingstekens, enzovoort). Daarom is het beter om de instelling te beheren met behulp van nuget config.

Een waarde instellen

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

Opmerking

In NuGet 3.4 en hoger kunt u omgevingsvariabelen in elke waarde gebruiken, zoals in repositoryPath=%PACKAGEHOME% (Windows) en repositoryPath=$PACKAGEHOME (Mac/Linux).

Een waarde verwijderen

Als u een waarde wilt verwijderen, geeft u een sleutel op met een lege waarde.

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

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

Een nieuw configuratiebestand maken

Maak met behulp van de .NET CLI een standaard-nuget.config door uit te voeren dotnet new nugetconfig. Zie dotnet CLI-opdrachten voor meer informatie.

U kunt de onderstaande sjabloon ook handmatig kopiëren naar het nieuwe bestand en vervolgens gebruiken nuget config -configFile <filename> om waarden in te stellen:

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

Hoe instellingen worden toegepast

Met meerdere NuGet.Config bestanden kunt u instellingen opslaan op verschillende locaties, zodat ze van toepassing zijn op één oplossing of op een groep oplossingen. Deze instellingen zijn gezamenlijk van toepassing op elke NuGet-bewerking die wordt aangeroepen vanaf de opdrachtregel of vanuit Visual Studio, met instellingen die zich 'het dichtst bij een oplossing' bevinden of de huidige map voorrang heeft. Als een opdrachtregelprogramma wordt gebruikt in een projectbestand, in plaats van een oplossingsbestand, wordt de projectmap gebruikt als de 'oplossingsmap', wat kan leiden tot inconsistent gedrag wanneer er een NuGet.Config bestand in een submap van het oplossingsbestand staat.

Specifiek, wanneer een configuratiebestand niet expliciet op de commando regel wordt opgegeven, laadt NuGet instellingen vanuit de verschillende configuratiebestanden in de volgende volgorde:

  1. (Ongebruikelijk) Het NuGetDefaults.Config bestand, dat instellingen bevat die alleen betrekking hebben op pakketbronnen.
  2. Het bestand op computerniveau.
  3. Het bestand op gebruikersniveau.
  4. Bestanden gevonden in elke map in het pad vanaf de basis van het station naar de huidige map (waar nuget.exe wordt aangeroepen of de map die de Visual Studio-oplossing bevat). Als bijvoorbeeld een opdracht wordt aangeroepen in c:\A\B\C, zoekt NuGet naar configuratiebestanden en laadt deze c:\in, vervolgens c:\A, en c:\A\Bten slotte c:\A\B\C.

Wanneer een configuratiebestand expliciet wordt opgegeven op de opdrachtregel, bijvoorbeeld nuget -configFile my.config of dotnet restore --configfile my.config, worden alleen de instellingen van het opgegeven bestand gebruikt.

Omdat NuGet instellingen in deze bestanden vindt, worden ze als volgt toegepast:

  1. Voor elementen met een enkel item vervangt NuGet een eerder gevonden waarde voor dezelfde sleutel. Dit betekent dat instellingen die zich het dichtst bij de huidige map of oplossing bevinden, eventuele eerder gevonden items overschrijven. De defaultPushSource-instelling in NuGetDefaults.Config wordt bijvoorbeeld overschreven als deze bestaat in een ander configuratiebestand.
  2. Voor verzamelingselementen (zoals <packageSources>), combineert NuGet de waarden van alle configuratiebestanden in één verzameling.
  3. Wanneer <clear /> aanwezig is voor een bepaald knooppunt, negeert NuGet eerder gedefinieerde configuratiewaarden voor dat knooppunt.

Aanbeveling

Voeg een nuget.config bestand toe in de hoofdmap van uw oplossingsopslagplaats. Dit wordt beschouwd als een best practice omdat het herhaalbaarheid bevordert en ervoor zorgt dat verschillende gebruikers dezelfde NuGet-configuratie hebben.

Uitleg van instellingen

Stel dat u de volgende mapstructuur hebt op twee afzonderlijke stations:

disk_drive_1
    User
disk_drive_2
    Project1
        Source
    Project2
        Source
    tmp

U hebt vervolgens vier NuGet.Config bestanden op de volgende locaties met de opgegeven inhoud. (Het bestand op computerniveau is niet opgenomen in dit voorbeeld, maar gedraagt zich op dezelfde manier als het bestand op gebruikersniveau.)

Bestand A. Bestand op gebruikersniveau(%appdata%\NuGet\NuGet.Config in Windows, ~/.config/NuGet/NuGet.Config op Mac/Linux):

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

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

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

Bestand 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 laadt en past instellingen als volgt toe, afhankelijk van waar deze wordt aangeroepen:

  • Aangeroepen vanuit disk_drive_1/users: Alleen de standaardopslagplaats die wordt vermeld in het configuratiebestand op gebruikersniveau (A) wordt gebruikt, omdat dat het enige bestand is dat opgeslagen disk_drive_1is.

  • Opgeroepen vanuit disk_drive_2/ of disk_drive_/tmp: Het bestand op gebruikersniveau (A) wordt eerst geladen. Vervolgens gaat NuGet naar de hoofdmap van disk_drive_2 en vindt bestand (B). NuGet zoekt ook naar een configuratiebestand in /tmp , maar vindt er geen. Als gevolg hiervan wordt de standaardopslagplaats nuget.org gebruikt, wordt pakketherstel ingeschakeld en worden pakketten uitgebreid.disk_drive_2/tmp

  • Aangeroepen vanuit disk_drive_2/Project1 of disk_drive_2/Project1/Source: Het bestand op gebruikersniveau (A) wordt eerst geladen, en vervolgens laadt NuGet het bestand (B) uit de hoofdmap van disk_drive_2, gevolgd door bestand (C). Instellingen in (C) overschrijven deze in (B) en (A), dus de repositoryPath locatie waar pakketten worden geïnstalleerd, is disk_drive_2/Project1/External/Packages in plaats van disk_drive_2/tmp. Omdat (C) ook <packageSources> verwijdert, is nuget.org niet meer beschikbaar als bron en blijft alleen https://MyPrivateRepo/ES/nuget over.

  • Opgeroepen vanuit disk_drive_2/Project2 of disk_drive_2/Project2/Source: Het gebruikersniveau-bestand (A) wordt eerst geladen, gevolgd door bestand (B) en bestand (D). Omdat packageSources niet is gewist, zijn zowel nuget.org als https://MyPrivateRepo/DQ/nuget beschikbaar als bronnen. Pakketten worden uitgebreid disk_drive_2/tmp zoals opgegeven in (B).

Aanvullende configuratie voor de hele gebruiker

Vanaf 5.7 heeft NuGet ondersteuning toegevoegd voor aanvullende configuratiebestanden voor de hele gebruiker. Hiermee kunnen externe leveranciers extra gebruikersconfiguratiebestanden toevoegen zonder verhoging van rechten. Deze configuratiebestanden vindt u in de standaardconfiguratiemap voor de hele gebruiker in een config submap. Alle bestanden die eindigen op .config of .Config worden overwogen. Deze bestanden kunnen niet worden bewerkt door de standaardhulpprogramma's.

Besturingssysteemplatform Aanvullende configuraties
Windows %appdata%\NuGet\config\*.Config
Mac/Linux ~/.config/NuGet/config/*.config of ~/.nuget/config/*.config

NuGet-standaardbestand

Het NuGetDefaults.Config is ongebruikelijk en kan alleen pakketbronnen opgeven waaruit pakketten worden geïnstalleerd en bijgewerkt, of het standaarddoel voor het publiceren van pakketten beheren met nuget push.

Omdat beheerders consistent NuGetDefaults.Config bestanden (bijvoorbeeld met Groepsbeleid) kunnen implementeren op ontwikkelings- en bouwmachines, kunnen zij ervoor zorgen dat iedereen in de organisatie consistente pakketbronnen gebruikt, ongeacht of nuget.org is inbegrepen.

Belangrijk

Het NuGetDefaults.Config bestand zorgt er nooit voor dat een pakketbron wordt verwijderd uit de NuGet-configuratie van een ontwikkelaar. Dit betekent dat als de ontwikkelaar NuGet al heeft gebruikt en daarom de nuget.org pakketbron heeft geregistreerd, deze niet wordt verwijderd na het maken van een NuGetDefaults.Config bestand.

Bovendien kunnen noch NuGetDefaults.Config een ander mechanisme in NuGet toegang tot pakketbronnen zoals nuget.org voorkomen. Als een organisatie dergelijke toegang wil blokkeren, moet deze andere middelen gebruiken, zoals firewalls.

NuGetDefaults.Config plaats

In de volgende tabel wordt beschreven waar het NuGetDefaults.Config bestand moet worden opgeslagen, afhankelijk van het doelbesturingssystem:

Besturingssysteemplatform NuGetDefaults.Config Plaats
Windows Visual Studio 2017 of NuGet 4.x+:%ProgramFiles(x86)%\NuGet
Visual Studio 2015 en eerder of NuGet 3.x en eerder:%PROGRAMDATA%\NuGet
Mac/Linux $XDG_DATA_HOME (meestal ~/.local/share of /usr/local/share, afhankelijk van de distributie van het besturingssysteem)

NuGetDefaults.Config-instellingen

  • packageSources: deze verzameling heeft dezelfde betekenis als packageSources in reguliere configuratiebestanden en geeft de standaardbronnen op. NuGet gebruikt de bronnen op volgorde bij het installeren of bijwerken van pakketten in projecten met behulp van de packages.config beheerindeling. Voor projecten die de PackageReference-indeling gebruiken, gebruikt NuGet eerst lokale bronnen, vervolgens bronnen op netwerkshares en vervolgens HTTP-bronnen, ongeacht de volgorde in de configuratiebestanden. NuGet negeert altijd de volgorde van bronnen met herstelbewerkingen.

  • disabledPackageSources: deze verzameling heeft ook dezelfde betekenis als in NuGet.Config bestanden, waarbij elke betrokken bron wordt vermeld op basis van de naam en een true/false waarde die aangeeft of deze is uitgeschakeld. Hierdoor kunnen de bronnaam en URL blijven staan packageSources zonder dat deze standaard is ingeschakeld. Afzonderlijke ontwikkelaars kunnen de bron vervolgens opnieuw inschakelen door de waarde false van de bron in andere NuGet.Config bestanden in te stellen zonder de juiste URL opnieuw te hoeven vinden. Dit is ook nuttig om ontwikkelaars van een volledige lijst van interne bron-URL's van een organisatie te voorzien, terwijl standaard alleen de bron van een individueel team wordt ingeschakeld.

  • defaultPushSource: Hiermee specificeert u het standaarddoel voor nuget push-bewerkingen, en wordt de ingebouwde standaard van nuget.org overschreven. Beheerders kunnen deze instelling implementeren om te voorkomen dat interne pakketten per ongeluk naar het publiek nuget.org worden gepubliceerd, omdat ontwikkelaars specifiek moeten gebruiken nuget push -Source om naar nuget.orgte publiceren.

Voorbeeld van NuGetDefaults.Config en toepassing

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