dotnet restore

Questo articolo si applica a: ✔️ .NET Core 3.1 SDK e versioni successive

Nome

dotnet restore: ripristina le dipendenze e gli strumenti di un progetto.

Riepilogo

dotnet restore [<ROOT>] [--configfile <FILE>] [--disable-build-servers]
    [--disable-parallel]
    [-f|--force] [--force-evaluate] [--ignore-failed-sources]
    [--interactive] [--lock-file-path <LOCK_FILE_PATH>] [--locked-mode]
    [--no-cache] [--no-dependencies] [--packages <PACKAGES_DIRECTORY>]
    [-r|--runtime <RUNTIME_IDENTIFIER>] [-s|--source <SOURCE>]
    [--tl:[auto|on|off]] [--use-current-runtime, --ucr [true|false]]
    [--use-lock-file] [-v|--verbosity <LEVEL>]

dotnet restore -h|--help

Descrizione

Un progetto .NET fa in genere riferimento a librerie esterne nei pacchetti NuGet che forniscono funzionalità aggiuntive. A queste dipendenze esterne viene fatto riferimento nel file di progetto (con estensione csproj o vbproj). Quando si esegue il comando dotnet restore, l'interfaccia della riga di comando di .NET usa NuGet per cercare queste dipendenze e scaricarle, se necessario. Garantisce inoltre che tutte le dipendenze richieste dal progetto siano compatibili tra loro e che non vi siano conflitti tra di essi. Al termine del comando, tutte le dipendenze richieste dal progetto sono disponibili in una cache locale e possono essere usate dall'interfaccia della riga di comando di .NET per compilare ed eseguire l'applicazione.

Nella maggior parte dei casi, non è necessario usare in modo esplicito il comando dotnet restore, poiché, se è necessario un ripristino NuGet, i comandi seguenti lo eseguono in modo implicito:

In alcuni casi, potrebbe risultare scomodo eseguire il ripristino implicito di NuGet con questi comandi. È ad esempio necessario che alcuni sistemi automatizzati, come i sistemi di compilazione, chiamino dotnet restore in modo esplicito per controllare quando si verifica il ripristino in modo che possano controllare l'utilizzo della rete. Per impedire il ripristino implicito di NuGet, è possibile usare il flag --no-restore con uno di questi comandi.

Nota

La verifica del pacchetto firmato durante le operazioni di ripristino richiede un archivio radice del certificato valido sia per la firma del codice che per il timestamp. Per altre informazioni, vedere verifica del pacchetto con firma NuGet.

Specificare i feed

Per ripristinare le dipendenze, NuGet necessita dei feed in cui si trovano i pacchetti. I feed vengono forniti in genere tramite il file di configurazione nuget.config. Quando viene installato .NET SDK, viene fornito un file di configurazione predefinito. Per specificare feed aggiuntivi, eseguire una delle operazioni seguenti:

È possibile eseguire l'override dei feed di nuget.config con l'opzione -s.

Per informazioni su come usare i feed autenticati, vedere Utilizzo di pacchetti da feed autenticati.

Cartella dei pacchetti globali

Per le dipendenze è possibile specificare dove vengono inseriti i pacchetti ripristinati durante l'operazione di ripristino, usando l'argomento --packages. Se questa destinazione non viene specificata, viene usata la cache predefinita dei pacchetti NuGet che si trova nella directory .nuget/packages della directory home dell'utente in tutti i sistemi operativi. Ad esempio, /home/user1 in Linux o C:\Utenti\user1 in Windows.

Strumenti specifici del progetto

Per gli strumenti specifici del progetto, dotnet restore ripristina innanzitutto il pacchetto in cui viene compresso lo strumento e quindi ripristina le dipendenze dello strumento come specificato nel file di progetto.

Differenze di nuget.config

Il funzionamento del comando dotnet restore può essere modificato dalle impostazioni del file nuget.config, se è presente. Se ad esempio si imposta globalPackagesFolder in nuget.config, i pacchetti NuGet ripristinati vengono posizionati nella cartella specificata. Questo approccio rappresenta un'alternativa all'impostazione dell'opzione --packages per il comando dotnet restore. Per altre informazioni, vedere Informazioni di riferimento su nuget.config.

Esistono tre impostazioni specifiche che dotnet restore ignora:

  • bindingRedirects

    I reindirizzamenti di binding non funzionano con gli elementi <PackageReference> e .NET supporta solo gli elementi <PackageReference> per i pacchetti NuGet.

  • soluzione

    Questa impostazione è specifica di Visual Studio e non si applica a .NET. .NET non usa un file packages.config e usa invece gli elementi <PackageReference> per i pacchetti NuGet.

  • trustedSigners

    Il supporto per la verifica della firma dei pacchetti multipiattaforma è stato aggiunto in .NET 5.0.100 SDK.

Download del manifesto del carico di lavoro

Quando si esegue questo comando, avvia un download in background asincrono dei manifesti pubblicitari per i carichi di lavoro. Se il download è ancora in esecuzione al termine di questo comando, il download viene arrestato. Per altre informazioni, vedere Manifesti pubblicitari.

Argomenti

  • ROOT

    Percorso facoltativo del file di progetto da ripristinare.

Opzioni

  • -a|--arch <ARCHITECTURE>

    Specifica l'architettura di destinazione. Si tratta di una sintassi abbreviata per l'impostazione dell'identificatore di runtime (RID), in cui il valore fornito viene combinato con il RID predefinito. Ad esempio, in un computer win-x64, specificando --arch x86 si imposta il RID su win-x86. Se si usa questa opzione, non usare l'opzione -r|--runtime. Disponibile a partire da .NET 6 Preview 7.

  • --configfile <FILE>

    File di configurazione NuGet (nuget.config) da usare. Se specificate, verranno usate solo le impostazioni di questo file. Se non specificate, verrà usata la gerarchia dei file di configurazione dalla directory corrente. Per ulteriori informazioni, vedere Configurazioni NuGet comuni.

  • --disable-build-servers

    Forza il comando a ignorare tutti i server di compilazione persistenti. Questa opzione consente di disabilitare in modo coerente l'uso della memorizzazione nella cache di compilazione, che forza una compilazione da zero. Una compilazione che non si basa sulle cache è utile quando le cache potrebbero essere danneggiate o errate per qualche motivo. Disponibile da .NET 7 SDK.

  • --disable-parallel

    Disabilita il ripristino di più progetti in parallelo.

  • --force

    Forza la risoluzione di tutte le dipendenze, anche se l'ultimo ripristino ha avuto esito positivo. La specifica di questo flag equivale all'eliminazione del file project.assets.json.

  • --force-evaluate

    Forza restore a valutare di nuovo tutte le dipendenze anche se esiste già un file di blocco.

  • -?|-h|--help

    Stampa le istruzioni di utilizzo del comando.

  • --ignore-failed-sources

    Segnala le origini con esito negativo solo se sono presenti pacchetti che soddisfano il requisito di versione.

  • --interactive

    Consente al comando di arrestarsi e attendere l'input o l'azione dell'utente, ad esempio il completamento dell'autenticazione.

  • --lock-file-path <LOCK_FILE_PATH>

    Percorso di output in cui viene scritto il file di blocco del progetto. Per impostazione predefinita, si tratta di PROJECT_ROOT\packages.lock.json.

  • --locked-mode

    Non consentire l'aggiornamento del file di blocco del progetto.

  • --no-cache

    Specifica di non memorizzare nella cache le richieste HTTP.

  • --no-dependencies

    Durante il ripristino di un progetto con riferimenti da progetto a progetto, ripristina il progetto radice e non i riferimenti.

  • --packages <PACKAGES_DIRECTORY>

    Specifica la directory per i pacchetti ripristinati.

  • -r|--runtime <RUNTIME_IDENTIFIER>

    Specifica un runtime per il ripristino dei pacchetti. Questo runtime viene usato per ripristinare i pacchetti di runtime non esplicitamente elencati nel tag <RuntimeIdentifiers> del file csproj. Per un elenco degli identificatori di runtime (RID, Runtime Identifier), vedere il catalogo RID.

  • -s|--source <SOURCE>

    Specifica l'URI dell'origine del pacchetto NuGet da usare durante l'operazione di ripristino. Questa impostazione esegue l'override di tutte le origini specificate nei file NuGet.config. È possibile specificare più origini, selezionando questa opzione più volte.

  • --tl:[auto|on|off]

    Specifica se il logger del terminale deve essere usato per l'output di compilazione. Il valore predefinito è auto, che prima di abilitare la registrazione del terminale verifica l'ambiente. Prima di abilitare il nuovo logger, il controllo dell'ambiente verifica che il terminale sia in grado di usare le funzionalità di output moderne e che non utilizzi un output standard reindirizzato. on ignora il controllo dell'ambiente e abilita la registrazione del terminale. off ignora il controllo dell'ambiente e usa il logger di console predefinito.

    Il logger del terminale mostra la fase di ripristino seguita dalla fase di compilazione. Durante ogni fase, i progetti che sono in corso di compilazione vengono visualizzati nella parte inferiore del terminale. Ogni progetto in fase di compilazione restituisce sia la destinazione MSBuild in corso di compilazione sia la quantità di tempo impiegato per tale destinazione. È possibile cercare queste informazioni per saperne di più sulla compilazione. Al termine della compilazione di un progetto, viene scritta una singola sezione "compilazione completata" che acquisisce:

    • Il nome del progetto compilato.
    • Il framework di destinazione (se sono presenti più destinazioni).
    • Lo stato della compilazione.
    • L'output primario di tale compilazione (con collegamento ipertestuale).
    • Qualsiasi diagnostica generata per il progetto.

    Questa opzione è disponibile a partire da .NET 8.

  • --use-current-runtime, --ucr [true|false]

    Imposta su RuntimeIdentifier una piattaforma portabile RuntimeIdentifier in base a quella del computer. Ciò avviene in modo implicito con le proprietà che richiedono un oggetto RuntimeIdentifier, ad esempio SelfContained, PublishAot, PublishSelfContained, PublishSingleFile e PublishReadyToRun. Se la proprietà è impostata su false, la risoluzione implicita non verrà più eseguita.

  • --use-lock-file

    Consente di generare e usare il file di blocco del progetto con il ripristino.

  • -v|--verbosity <LEVEL>

    Imposta il livello di dettaglio del comando. I valori consentiti sono q[uiet], m[inimal], n[ormal], d[etailed] e diag[nostic]. Il valore predefinito è minimal. Per ulteriori informazioni, vedere LoggerVerbosity.

Esempi

  • Ripristinare le dipendenze e gli strumenti per il progetto nella directory corrente:

    dotnet restore
    
  • Ripristinare le dipendenze e gli strumenti per il progetto app1 che si trova nel percorso specificato:

    dotnet restore ./projects/app1/app1.csproj
    
  • Ripristinare le dipendenze e gli strumenti per il progetto nella directory corrente usando il percorso di file specificato come origine:

    dotnet restore -s c:\packages\mypackages
    
  • Ripristinare le dipendenze e gli strumenti per il progetto nella directory corrente usando i due percorsi di file specificati come origini:

    dotnet restore -s c:\packages\mypackages -s c:\packages\myotherpackages
    
  • Ripristinare dipendenze e strumenti per il progetto nella directory corrente che mostra l'output dettagliato:

    dotnet restore --verbosity detailed
    

Controllare le vulnerabilità di sicurezza

A partire da .NET 8, è possibile acconsentire esplicitamente al controllo della sicurezza NuGet per dotnet restore. Questo controllo genera un report delle vulnerabilità di sicurezza con il nome del pacchetto interessato, la gravità della vulnerabilità e un collegamento all'avviso contenente altri dettagli.

Per acconsentire esplicitamente al controllo della sicurezza, impostare la proprietà <NuGetAudit> MSBuild su true nel file di progetto. Inoltre, per recuperare il set di dati di vulnerabilità noto, assicurarsi di avere il registro centrale NuGet.org definito come una delle origini del pacchetto:

<packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
</packageSources>

È possibile configurare il livello a cui il controllo avrà esito negativo impostando la proprietà <NuGetAuditLevel> MSBuild. I valori consentiti sono low, moderate, high e critical. Ad esempio, se si vogliono visualizzare solo avvisi moderati, alti e critici, è possibile impostare la proprietà su moderate.