Condividi tramite


dotnet restore

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

Nome

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

Riepilogo

dotnet restore [<PROJECT>|<SOLUTION>|<FILE>]
  [-a|--arch <ARCHITECTURE>] [--configfile <FILE>] [--disable-build-servers]
  [--disable-parallel] [-f|--force] [--force-evaluate]
  [--ignore-failed-sources] [--interactive] [--lock-file-path <LOCK_FILE_PATH>]
  [--locked-mode] [--no-dependencies] [--no-http-cache]
  [--os <OS>] [--packages <PACKAGES_DIRECTORY>]
  [-r|--runtime <RUNTIME_IDENTIFIER>] [-s|--source <SOURCE>]
  [--tl:[auto|on|off]] [--ucr|--use-current-runtime] [--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 firmato 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

PROJECT | SOLUTION | FILE

File di progetto o soluzione o C# (app basata su file) su cui operare. Se non viene specificato un file, MSBuild cerca un progetto o una soluzione nella directory corrente.

  • PROJECT è il percorso e il nome file di un file di progetto C#, F# o Visual Basic oppure il percorso di una directory contenente un file di progetto C#, F# o Visual Basic.

  • SOLUTION è il percorso e il nome file di un file di soluzione (.sln o estensione slnx) o il percorso di una directory contenente un file di soluzione.

  • FILE è un argomento aggiunto in .NET 10. Percorso e nome file di un'app basata su file. Le app basate su file sono contenute all'interno di un singolo file compilato ed eseguito senza un file di progetto (con estensione csproj) corrispondente. Per altre informazioni, vedere Creare app C# basate su file.

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 si dispone di indicazione, verranno usate solo le impostazioni di questo file. Se non specificato, 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.

  • --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-dependencies

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

  • --no-http-cache

    Disabilitare la memorizzazione nella cache HTTP per i pacchetti.

  • --os

    Specifica il sistema operativo 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 --os linux si imposta il RID su linux-x64.

    Introdotto in .NET SDK 10.0.100

  • --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.

  • --ucr|--use-current-runtime

    Usare il runtime corrente come runtime di destinazione.

  • --use-lock-file

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

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

    Specifica se il Logger 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.

    Terminale Logger 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 che compila restituisce sia la destinazione MSBuild attualmente in fase di compilazione che la quantità di tempo impiegato per tale destinazione. È possibile cercare queste informazioni per altre informazioni 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.

  • -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.

  • -?|-h|--help

    Stampa le istruzioni di utilizzo del comando.

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, dotnet restore include il controllo della sicurezza NuGet. 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 rifiutare esplicitamente il controllo della sicurezza, impostare la <NuGetAudit> proprietà MSBuild su false nel file di progetto.

Per ottenere i dati sulle vulnerabilità, a partire da .NET 9, è possibile usare auditSources oltre a packageSources. Se non vengono fornite origini di controllo, dotnet restore usa invece le origini dei pacchetti. NuGet controlla qualsiasi origine purché l'origine fornisca la VulnerabilityInfo risorsa.

Per elencare NuGet.org come origine di controllo, definire quanto segue nel file nuget.config :

<configuration>
    <auditSources>
        <clear />
        <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    </auditSources>
</configuration>

È 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.

In .NET 8 e .NET 9, solo i riferimenti diretti ai pacchetti vengono controllati per impostazione predefinita. A partire da .NET 10, NuGet controlla sia i riferimenti diretti chetransitivi ai pacchetti per impostazione predefinita. È possibile modificare la modalità impostando la <NuGetAuditMode> proprietà MSBuild su direct o all.

Per altre informazioni, vedere Controllo delle dipendenze dei pacchetti per le vulnerabilità di sicurezza.