Condividi tramite


Configurazioni comuni di NuGet

Il comportamento di NuGet è basato sulle impostazioni accumulate in uno o più file di configurazione (XML) che possono esistere in una soluzione (progetto se non viene usata alcuna soluzione), livelli utente e a livello di computer.

Configurare i percorsi e gli usi dei file

Ambito NuGet.Config posizione del file Description
Soluzione Cartella corrente (nota anche come cartella della soluzione) o qualsiasi cartella fino alla radice del disco. In una cartella della soluzione le impostazioni si applicano a tutti i progetti nelle sottocartelle. Si noti che se un file di configurazione viene inserito in una cartella di progetto, non ha alcun effetto su tale progetto. Quando si ripristina un progetto nella riga di comando, la directory del progetto viene considerata come la directory della soluzione, che può causare differenze nel comportamento durante il ripristino del progetto e della soluzione.
User Windows:%appdata%\NuGet\NuGet.Config
Mac/Linux:~/.config/NuGet/NuGet.Config o ~/.nuget/NuGet/NuGet.Config (varia in base agli strumenti)
Le configurazioni aggiuntive sono supportate in tutte le piattaforme. Queste configurazioni non possono essere modificate dagli strumenti.
Windows:%appdata%\NuGet\config\*.Config
Mac/Linux:~/.config/NuGet/config/*.config o ~/.nuget/config/*.config
Le impostazioni si applicano a tutte le operazioni, ma vengono sostituite da qualsiasi impostazione a livello di soluzione.
Computatore Windows:%ProgramFiles(x86)%\NuGet\Config
Mac/Linux:/etc/opt/NuGet/Config (Linux) o /Library/Application Support (Mac) per impostazione predefinita. Se $NUGET_COMMON_APPLICATION_DATA non è né null né vuoto, invece $NUGET_COMMON_APPLICATION_DATA/NuGet/Config
Le impostazioni si applicano a tutte le operazioni nel computer, ma vengono sostituite da qualsiasi impostazione a livello di utente o soluzione.

Annotazioni

In Mac/Linux il percorso del file di configurazione utente varia in base agli strumenti. L'interfaccia della riga di comando di .NET usa la ~/.nuget/NuGet cartella , mentre Mono usa la ~/.config/NuGet cartella .

In Mac/Linux il percorso del file di configurazione a livello di utente varia in base agli strumenti

In Mac/Linux il percorso del file di configurazione utente varia in base agli strumenti. La maggior parte degli utenti usa strumenti che cercano il file di configurazione utente nella ~/.nuget/NuGet cartella . Questi altri strumenti cercano il file di configurazione utente nella ~/.config/NuGet cartella :

  • Mono
  • NuGet.exe
  • Visual Studio 2019 per Mac (e versioni precedenti)
  • Visual Studio 2022 per Mac (e versioni successive), solo quando si lavora su progetti Mono classici.

Se gli strumenti usati includono entrambe le posizioni, è consigliabile consolidarli seguendo questa procedura per consentire l'uso di un solo file di configurazione a livello di utente:

  1. Controllare il contenuto dei due file di configurazione a livello di utente e mantenere quello desiderato nella ~/.nuget/NuGet cartella.
  2. Impostare il collegamento simbolico da ~/.nuget/NuGet a ~/.config/NuGet. Ad esempio, eseguire il comando bash: ln -s ~/.nuget/NuGet ~/.config/NuGet.

Note per le versioni precedenti di NuGet:

  • NuGet 3.3 e versioni precedenti usavano una .nuget cartella per le impostazioni a livello di soluzione. Questa cartella non viene usata in NuGet 3.4+.
  • Per NuGet da 2.6 a 3.x, il file di configurazione a livello di computer in Windows si trovava in %ProgramData%\NuGet\Config[\{IDE}[\{Version}[\{SKU}]]]\NuGet.Config, dove {IDE} può essere VisualStudio, {Version} era la versione di Visual Studio, 14.0ad esempio e {SKU} è Community, Proo Enterprise. Per eseguire la migrazione delle impostazioni a NuGet 4.0+, copiare semplicemente il file di configurazione in %ProgramFiles(x86)%\NuGet\Config. In Linux, questo percorso precedente era /etc/opte in Mac, /Library/Application Support.

Modifica delle impostazioni di configurazione

Un NuGet.Config file è un semplice file di testo XML contenente coppie chiave/valore, come descritto nell'argomento Impostazioni di configurazione NuGet .

Le impostazioni vengono gestite usando il comando di configurazione dell'interfaccia della riga di comando di NuGet:

  • Per impostazione predefinita, le modifiche vengono apportate al file di configurazione a livello di utente. (In Mac/Linux, il percorso del file di configurazione a livello di utente varia in base agli strumenti)
  • Per modificare le impostazioni in un file diverso, usare l'opzione -configFile . In questo caso i file possono usare qualsiasi nome file.
  • Le chiavi fanno sempre distinzione tra maiuscole e minuscole.
  • L'elevazione dei privilegi è necessaria per modificare le impostazioni nel file di impostazioni a livello di computer.

Avvertimento

Sebbene sia possibile modificare il file in qualsiasi editor di testo, NuGet (v3.4.3 e versioni successive) ignora automaticamente l'intero file di configurazione se contiene codice XML non valido (tag non corrispondenti, virgolette non valide e così via). Questo è il motivo per cui è preferibile gestire l'impostazione usando nuget config.

Impostazione di un valore

Finestre:

# 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

Annotazioni

In NuGet 3.4 e versioni successive è possibile usare le variabili di ambiente in qualsiasi valore, come in repositoryPath=%PACKAGEHOME% (Windows) e repositoryPath=$PACKAGEHOME (Mac/Linux).

Rimozione di un valore

Per rimuovere un valore, specificare una chiave con un valore vuoto.

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

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

Creazione di un nuovo file di configurazione

Usando l'interfaccia della riga di comando di .NET, creare un nuget.config predefinito eseguendo dotnet new nugetconfig. Per altre informazioni, vedere comandi CLI di dotnet.

In alternativa, copiare manualmente il modello seguente nel nuovo file e quindi usare nuget config -configFile <filename> per impostare i valori:

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

Modalità di applicazione delle impostazioni

Più NuGet.Config file consentono di archiviare le impostazioni in posizioni diverse in modo che si applichino a una singola soluzione o a un gruppo di soluzioni. Queste impostazioni si applicano collettivamente a qualsiasi operazione NuGet richiamata dalla riga di comando o da Visual Studio, con le impostazioni "più vicine" a una soluzione o alla cartella corrente che ha la precedenza. Se uno strumento da riga di comando viene usato in un file di progetto, anziché in un file di soluzione, la directory del progetto viene usata come "directory della soluzione", che può causare comportamenti incoerenti quando è presente un NuGet.Config file in una sottodirectory del file di soluzione.

In particolare, quando un file di configurazione non viene specificato in modo esplicito nella riga di comando, NuGet carica le impostazioni dai diversi file di configurazione nell'ordine seguente:

  1. (Non comune) Il NuGetDefaults.Config file, che contiene le impostazioni correlate solo alle origini del pacchetto.
  2. File a livello del computer.
  3. File a livello di utente.
  4. I file trovati in ogni cartella nel percorso dalla radice del disco alla cartella corrente (dove nuget.exe è invocato o la cartella contenente la soluzione di Visual Studio). Ad esempio, se viene richiamato un comando in c:\A\B\C, NuGet cerca e carica i file di configurazione in c:\, quindi c:\Ac:\A\B, e infine c:\A\B\C.

Quando un file di configurazione viene specificato in modo esplicito nella riga di comando, ad esempio nuget -configFile my.config o dotnet restore --configfile my.config, verranno usate solo le impostazioni del file specificato.

Man mano che NuGet trova le impostazioni in questi file, vengono applicate come segue:

  1. Per gli elementi a elemento singolo, NuGet ha sostituito qualsiasi valore trovato in precedenza per la stessa chiave. Ciò significa che le impostazioni "più vicine" alla cartella corrente o alla soluzione sostituiscono qualsiasi altro elemento trovato in precedenza. Ad esempio, l'impostazione defaultPushSource in NuGetDefaults.Config viene sottoposta a override se esiste in qualsiasi altro file di configurazione.
  2. Per gli elementi della raccolta ,ad esempio <packageSources>, NuGet combina i valori di tutti i file di configurazione in una singola raccolta.
  3. Quando <clear /> è presente per un determinato nodo, NuGet ignora i valori di configurazione definiti in precedenza per tale nodo.

Suggerimento

Aggiungere un nuget.config file nella radice del repository della soluzione. Questa procedura è considerata una procedura consigliata perché promuove la ripetibilità e garantisce che diversi utenti abbiano la stessa configurazione NuGet.

Procedura dettagliata per le impostazioni

Si supponga di avere la struttura di cartelle seguente in due unità separate:

disk_drive_1
    User
disk_drive_2
    Project1
        Source
    Project2
        Source
    tmp

Avrai quindi quattro NuGet.Config file nelle seguenti posizioni con il contenuto specificato. Il file a livello di computer non è incluso in questo esempio, ma si comporta in modo analogo al file a livello di utente.

File A. File a livello di utente, (%appdata%\NuGet\NuGet.Config in Windows, ~/.config/NuGet/NuGet.Config in Mac/Linux):

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

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

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

File 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 carica e applica quindi le impostazioni come indicato di seguito, a seconda della posizione in cui viene richiamata:

  • Richiamato da disk_drive_1/users: viene usato solo il repository predefinito elencato nel file di configurazione a livello di utente (A), perché questo è l'unico file trovato in disk_drive_1.

  • Richiamato da disk_drive_2/ o disk_drive_/tmp: il file a livello di utente (A) viene caricato per primo, quindi NuGet passa alla radice di disk_drive_2 e trova il file (B). NuGet cerca anche un file di configurazione in /tmp ma non ne trova uno. Di conseguenza, viene usato il repository predefinito in nuget.org , il ripristino del pacchetto è abilitato e i pacchetti vengono espansi in disk_drive_2/tmp.

  • Richiamato da disk_drive_2/Project1 o disk_drive_2/Project1/Source: il file a livello di utente (A) viene caricato per primo, quindi NuGet carica il file (B) dalla radice di disk_drive_2, seguito dal file (C). Le impostazioni in (C) eseguono l'override di quelle in (B) e (A), quindi il percorso in cui vengono installati i repositoryPath pacchetti è disk_drive_2/Project1/External/Packages anziché disk_drive_2/tmp. Inoltre, poiché (C) cancella <packageSources>, nuget.org non è più disponibile come origine lasciando solo https://MyPrivateRepo/ES/nuget.

  • Richiamato da disk_drive_2/Project2 o disk_drive_2/Project2/Source: il file a livello di utente (A) viene caricato prima seguito da file (B) e file (D). Poiché packageSources non è cancellata, sia nuget.org che https://MyPrivateRepo/DQ/nuget sono disponibili come sorgenti. I pacchetti vengono espansi in disk_drive_2/tmp come specificato in (B).

Configurazione aggiuntiva a livello di utente

A partire dalla versione 5.7, NuGet ha aggiunto il supporto per altri file di configurazione a livello di utente. In questo modo i fornitori di terze parti possono aggiungere altri file di configurazione utente senza elevazione dei privilegi. Questi file di configurazione si trovano nella cartella di configurazione standard a livello di utente all'interno di una config sottocartella. Tutti i file che terminano con .config o .Config verranno considerati. Questi file non possono essere modificati dagli strumenti standard.

Piattaforma del sistema operativo Configurazioni aggiuntive
Windows %appdata%\NuGet\config\*.Config
Mac/Linux ~/.config/NuGet/config/*.config o ~/.nuget/config/*.config

File di impostazioni predefinite NuGet

Il NuGetDefaults.Config è insolito e può specificare solo le origini dei pacchetti da cui vengono installati e aggiornati i pacchetti o controllare la destinazione predefinita per la pubblicazione di pacchetti con nuget push.

Poiché gli amministratori possono distribuire file coerenti NuGetDefaults.Config in computer di sviluppo e compilazione, ad esempio usando Criteri di gruppo, gli amministratori possono assicurarsi che tutti gli utenti dell'organizzazione usino origini di pacchetti coerenti, indipendentemente dal fatto che includano o meno nuget.org.

Importante

Il NuGetDefaults.Config file non comporta mai la rimozione di un'origine del pacchetto dalla configurazione NuGet di uno sviluppatore. Ciò significa che se lo sviluppatore ha già usato NuGet e quindi ha l'origine del pacchetto nuget.org registrata, non verrà rimossa dopo la creazione di un NuGetDefaults.Config file.

Inoltre, né NuGetDefaults.Config altri meccanismi in NuGet possono impedire l'accesso a origini di pacchetti come nuget.org. Se un'organizzazione vuole bloccare tale accesso, deve usare altri mezzi, ad esempio i firewall per farlo.

NuGetDefaults.Config ubicazione

La tabella seguente descrive dove archiviare il NuGetDefaults.Config file, a seconda del sistema operativo di destinazione:

Piattaforma del sistema operativo NuGetDefaults.Config Ubicazione
Windows Visual Studio 2017 o NuGet 4.x+:%ProgramFiles(x86)%\NuGet
Visual Studio 2015 e versioni precedenti o NuGet 3.x e precedenti:%PROGRAMDATA%\NuGet
Mac/Linux $XDG_DATA_HOME (~/.local/share o /usr/local/share, a seconda della distribuzione del sistema operativo)

Impostazioni di NuGetDefaults.Config

  • packageSources: questa raccolta ha lo stesso significato di nei packageSources normali file di configurazione e specifica le origini predefinite. NuGet utilizza le sorgenti nell'ordine specificato durante l'installazione o l'aggiornamento dei pacchetti nei progetti che usano il formato di gestione packages.config. Per i progetti che usano il formato PackageReference, NuGet usa prima le origini locali, quindi le origini nelle condivisioni di rete, quindi le origini HTTP, indipendentemente dall'ordine nei file di configurazione. NuGet ignora sempre l'ordine delle origini con le operazioni di ripristino.

  • disabledPackageSources: questa raccolta ha anche lo stesso significato nei NuGet.Config file, in cui ogni sorgente interessata è elencata per nome e dal rispettivo valore true/false che indica se è disabilitata. In questo modo il nome e l'URL di origine rimangono in packageSources senza attivarlo per impostazione predefinita. I singoli sviluppatori possono quindi riabilitare l'origine impostando il valore dell'origine su false in altri NuGet.Config file senza dover trovare di nuovo l'URL corretto. Ciò è utile anche per fornire agli sviluppatori un elenco completo di URL di origine interni per un'organizzazione, abilitando solo l'origine di un singolo team per impostazione predefinita.

  • defaultPushSource: specifica la destinazione predefinita per le operazioni nuget push, sostituendo l'impostazione predefinita di nuget.org. Gli amministratori possono distribuire questa impostazione per evitare la pubblicazione di pacchetti interni nel pubblico nuget.org per errore, in quanto gli sviluppatori devono usare nuget push -Source specificamente per la pubblicazione in nuget.org.

Esempio di NuGetDefaults.Config e applicazione

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