Ripristino pacchetto NuGet non funzionante


165

Ho registrato un progetto su un computer, verificato su un altro e ho scoperto che mancano i binari installati da NuGet. Potrei controllarli anche nel controllo del codice sorgente, ma sembra che ci sia una soluzione migliore:

http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Ho seguito quelle istruzioni, ora ho una .nugetcartella dove si dovrebbe essere, ho le seguenti voci nel mio file .csproj:

<RestorePackages>true</RestorePackages>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

eppure quando ricostruisco la mia soluzione, i pacchetti mancanti non vengono ripristinati.

Cosa mi sto perdendo? Come posso diagnosticare questo problema?


Vedi nuget.exe attivato nel registro di output?
Pranav,

E, soprattutto: vedi errori nel registro di output?
Maartenba,

Risposte:


272

Nota: è possibile forzare l'esecuzione del ripristino del pacchetto eseguendo i seguenti comandi nella console del gestore pacchetti nuget

Pacchetto di aggiornamento - Reinstalla

Forza la reinstallazione di tutto nella soluzione.


Update-Package -Reinstall -ProjectName myProj

Forza la reinstallazione di tutto nel progetto myProj.

Nota : questa è l'opzione nucleare. Quando si utilizza questo comando, è possibile che non si ottengano le stesse versioni dei pacchetti installati e ciò potrebbe causare problemi. È meno probabile che ciò si verifichi a livello di progetto rispetto al livello di soluzione.

È possibile utilizzare l' -safeopzione del parametro della riga di comando per vincolare gli aggiornamenti alle versioni più recenti con lo stesso componente versione principale e secondaria. Questa opzione è stata aggiunta in seguito e risolve alcuni dei problemi menzionati nei commenti.

Pacchetto di aggiornamento -Reinstall -Safe


7
@ NightOwl888 che suona come qualcosa che deve essere segnalato a Nuget in quanto non dovrebbe esserci modo di farlo, a meno che forse non hai sempre avuto problemi di associazione inferno DLL e per fortuna funzionava, ma la reinstallazione ha finito la tua fortuna.
Chris Marisic,

4
@nightowl se stai usando il controllo del codice sorgente non dovrebbe essere così difficile eseguire il backup delle modifiche.
ErikE

4
Il principale svantaggio qui è che le versioni del pacchetto non sono mantenute, quindi verrà installata l'ultima versione del pacchetto. Questo può essere un problema se il tuo progetto non è compatibile con una nuova versione ..
JDandChips

4
Sì, Update-Package -Reinstall ha funzionato per me. Non ho idea del perché l'IDE non lo faccia. Tutto è impostato correttamente. Ugghh, lo giuro, NuGet è sia buono che fastidioso.
Jeremy Ray Brown,

2
gentile da parte tua aggiungere l '"importante! Questo potrebbe distruggere il tuo progetto" nella parte inferiore della tua risposta!
Devman,

25

Per gli altri che si imbattono in questo post, leggi questo.

NuGet 2.7+ ci ha introdotto al ripristino automatico dei pacchetti . Questo è considerato un approccio molto migliore per la maggior parte delle applicazioni in quanto non altera il processo MSBuild. Meno mal di testa.

Alcuni link per iniziare:


2
Grazie per una risposta adeguata alla versione corrente di NuGet.
Eric J.,

20

Devi scegliere un modo tra i seguenti:

Reinstalla un pacchetto in base al nome in tutti i progetti della soluzione:

Update-Package –reinstall <packageName>

Reinstalla un pacchetto per nome e ignora le sue dipendenze in tutti i progetti della soluzione:

Update-Package –reinstall <packageName> -ignoreDependencies

Reinstalla un pacchetto in base al nome in un progetto:

Update-Package –reinstall <packageName> <projectName>

Reinstalla tutti i pacchetti in un progetto specifico:

Update-Package -reinstall -ProjectName <projectName>

Reinstalla tutti i pacchetti in una soluzione:

Update-Package -reinstall 

Risolto il mio problema di stile rapido e sporco.
Blackorchid,

20

Hai abilitato la modalità di ripristino dei pacchetti nel progetto che ha i pacchetti / binari mancanti? Esiste un problema noto che richiede l'installazione corretta dei pacchetti quando si abilita la modalità di ripristino:

http://nuget.codeplex.com/workitem/1879


Il link originale è morto; questo potrebbe essere un rimpiazzo: https://github.com/NuGet/Home/issues/1968


3
Grazie per il link Abilitare la modalità di ripristino dei pacchetti in un progetto che ha i pacchetti / binari mancanti sarà un caso comune. Se non hai i pacchetti, è quando li vuoi ottenere. Caso d'uso fallito.
Anthony,

2
Quando dici "abilita la modalità di ripristino dei pacchetti nel progetto che ha i pacchetti mancanti", cosa intendi? Esiste un comando di console che devo eseguire per farlo?
CodeWarrior,

90
NuGet mi delude ogni giorno, lo disprezzo del tutto.
Jammer,

14

VS 2017

Strumenti> Gestione pacchetti NuGet> Impostazioni Gestione pacchetti> Generale Fare clic su "Cancella tutte le cache NuGet"


Quando è stato possibile estrarre una soluzione dal controllo del codice sorgente (gestita utilizzando Visual Studio Team Explorer con DevOps / Git) le build non erano possibili a causa di riferimenti mancanti e i pacchetti di ripristino non hanno fatto nulla. Questa soluzione è stata quella corretta per questa circostanza.
PJRobot

12

Ho riscontrato questo problema in due scenari.

Innanzitutto, quando provo a creare la mia soluzione dalla riga di comando utilizzando msbuild.exe. In secondo luogo, quando provo a creare lo sln e i progetti contenenti sul mio server di build usando TFS e CI.

Ottengo errori che affermano che mancano riferimenti. Durante l'ispezione sia della mia directory di build locale che del server TFS, vedo che la cartella / pacchetti non è stata creata e che i pacchetti nuget non vengono copiati. Anche seguire le istruzioni elencate nella risposta di Alexandre http://nuget.codeplex.com/workitem/1879 non ha funzionato per me.

Ho abilitato i pacchetti di ripristino tramite VS2010 e ho visto che le build funzionano solo da VS2010. Ancora una volta, l'utilizzo di msbuild non riesce. La mia soluzione alternativa è probabilmente totalmente non valida, ma per il mio ambiente tutto ha funzionato da una riga di comando compilata localmente, nonché da una build CI in TFS.

Sono entrato in. \ Nuget e ho cambiato questa riga nel file .nuget \ NuGet.targets:

a partire dal:

<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" -o "$(PackagesDir)"</RestoreCommand>

a: (nota, senza le virgolette attorno alle variabili)

<RestoreCommand>$(NuGetCommand) install $(PackagesConfig) -source $(PackageSources) -o $(PackagesDir)</RestoreCommand>

Capisco che se le mie directory hanno spazi in esse, questo fallirà, ma non ho spazi nelle mie directory e quindi questa soluzione ha portato a completare con successo le mie build ... per il momento.

Dirò che l'attivazione della registrazione a livello diagnostico nella build aiuterà a mostrare quali comandi vengono eseguiti da msbuild. Questo è ciò che mi ha portato ad hackerare temporaneamente il file target.


Ho avuto il problema con le doppie virgolette e ho dovuto apportare la stessa modifica che hai fatto. Molto frustrante!
Greg,

5

Se qualcos'altro non ha funzionato, prova:

  1. Chiudi progetto.
  2. Elimina la cartella dei pacchetti nella cartella della soluzione.
  3. Aprire nuovamente il progetto e ripristinare nuovamente i pacchetti di nugget.

Ha funzionato per me ed è facile da provare.


2
Questo ha funzionato per me. Nel passaggio 3, non ho dovuto ripristinare manualmente i pacchetti: sono stati ripristinati automaticamente quando ho aperto il progetto.
Tawab Wakil,

5

Se nessuna delle altre risposte funziona per te, prova quanto segue, l'unica cosa che ha funzionato per me:

Trova il tuo .csprojfile e modificalo in un editor di testo.

Trova il <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">tag nel tuo .csprojfile ed elimina l'intero blocco.

Reinstalla tutti i pacchetti nella soluzione:

Update-Package -reinstall

Dopo questo i tuoi pacchetti nuget dovrebbero essere ripristinati, penso che questo potrebbe essere un caso marginale che si verifica solo quando sposti il ​​tuo progetto in una posizione diversa.


Questo mi ha salvato dall'andare completamente fuori di testa. Grazie!
Jeff Hay,

4

Solo per gli altri che potrebbero incorrere in questo problema, sono stato in grado di risolvere il problema chiudendo Visual Studio e riaprendo il progetto. Quando il progetto è stato caricato, i pacchetti sono stati ripristinati durante la fase di inizializzazione.


4

Per me avevo un tag vuoto NuGetPackageImportStamp in .csproj

<NuGetPackageImportStamp>
    </NuGetPackageImportStamp>

Idealmente dovrebbe contenere alcuni GUID validi.

Rimuovendo il suddetto tag e poi "Restore Nugets" ha funzionato per me.


1

A volte succede qualcosa di strano e l'uso di Visual Studio per il ripristino automatico non funziona. In tal caso è possibile utilizzare la console di Gestione pacchetti NuGet. Viene aperto in Visual Studio da Strumenti -> Gestione pacchetti NuGet -> Console Gestione pacchetti . I comandi all'interno della console sono semplici. E per ottenere aiuto contestuale durante la digitazione di un comando basta premere il pulsante e ti darà tutte le opzioni che iniziano con le lettere che stai scrivendo. Quindi se un pacchetto non è installato, ad esempio log4net, digitare il comando seguente:

Log -net del pacchetto di installazione

Puoi fare molto di più, come specificare la versione da installare, aggiornare un pacchetto, disinstallare un pacchetto, ecc.

Ho dovuto usare la console per aiutarmi quando Visual Studio si comportava come uno strano.


1

Il ripristino automatico dei pacchetti fallirà per uno dei seguenti motivi:

  1. Non hai rimosso i file NuGet.exe e NuGet.targets dalla cartella .nuget della soluzione (che puoi trovare nella cartella principale della soluzione)
  2. Non è stato abilitato il ripristino automatico del pacchetto da Strumenti >> Opzioni >> Nuget Package Manager >> Impostazioni generali.
  3. Hai dimenticato di rimuovere manualmente i riferimenti in tutti i tuoi progetti al file Nuget.targets
  4. È necessario riavviare Visual Studio (assicurarsi che il processo venga interrotto dal task manager prima di riavviare).

Il seguente articolo descrive in dettaglio come andare ai punti 1-3: https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore


1
Per quanto riguarda il punto n. 1, il collegamento fornito contraddice il consiglio: "Se si utilizza TFS 1. Rimuovere i file NuGet.exe e NuGet.targets dalla cartella .nuget della soluzione 2. Conservare il file NuGet.Config per continuare a ignorare aggiunta di pacchetti al controllo del codice sorgente ".
Andrew Dennison,

1

Ho avuto pacchetti NuGet rotti dopo aver eseguito un Ripristino configurazione di sistema sul mio sistema, eseguendo il backup di circa due giorni. (I pacchetti NuGet erano stati installati nel frattempo.) Per risolverlo, dovevo andare nella cartella .nuget \ pacchetti nel mio profilo utente, trovare i pacchetti ed eliminarli. Solo allora Visual Studio avrebbe rimosso i pacchetti e li avrebbe aggiunti correttamente come riferimenti.


1

La migliore soluzione alternativa che ho trovato creando un nuovo progetto da zero, quindi importare tutti i file di origine con il codice. Il mio progetto non è stato così complicato, quindi non ho avuto problemi da lì.


1

Nessuna delle altre soluzioni ha funzionato nella mia situazione:

Le dipendenze AspNetCore erano state installate / disinstallate e venivano memorizzate nella cache. 'AspNetCore.All' rifiuta di aggiornare / reinstallare / rimuovere correttamente. E indipendentemente da quello che ho fatto, avrebbe usato le dipendenze memorizzate nella cache (con cui non era compatibile), perché erano una versione superiore.

  1. Backup di tutto. Nota l'elenco delle dipendenze che dovrai reinstallare, Esci da VisualStudio
  2. Apri tutti i file .proj in un editor di testo e rimuovi tutto PackageReference
  3. In ogni progetto, eliminare i bin, objcartelle
  4. Elimina tutte le cartelle "pacchetti" che trovi nella soluzione.
  5. Apri la soluzione, vai in Tools > Nuget Package Manager > Package Manager Settingse Clear all Nuget caches. Controlla la console perché potrebbe non riuscire a rimuovere alcuni elementi: copia il percorso della cartella ed esci da Visual Studio.
  6. Elimina qualsiasi cosa da quella cartella Riapri la soluzione e inizia a installare nuovamente i pacchetti nuget.

Se il nugetproblema persiste , ripeti, ma cerca anche l'unità in Windows Explorer ed elimina qualsiasi aspetto cache.


0

vs2015 nessun problema di ripristino di nuget abilitato. La mia soluzione:

  1. aggiungi la cartella .nuget, aggiungi il file NuGet.Config e NuGet.targets nella directory .nuget

  2. ogni file di progetto aggiunge: build

  <RestorePackages>true</RestorePackages>

  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>

Questo è il vecchio modo di farlo. Vedi la risposta di @davenewza e il suo link al blog.davidebbo.com/2014/01/…
timB33

0

Se l'errore che stai riscontrando non è "in grado di connettersi al server remoto" come era mio, allora sarebbe utile avere anche questo controllo oltre ai controlli forniti nei commenti sopra.

Ho visto che c'erano 2 fonti di pacchetti NUGET da cui i pacchetti potevano essere scaricati (all'interno di Strumenti-> Nuget Package Manager-> Packager Manager Settings). Uno dei sorgenti del pacchetto non funzionava e Nuget stava provando a scaricare solo da quella fonte.

Le cose sono andate a posto quando ho cambiato la fonte del pacchetto da scaricare da: https://www.nuget.org/api/v2/ ESPLICAMENTE nelle impostazioni


0

Nel mio caso, un tentativo di ripristino di Nuget interrotto aveva danneggiato uno dei packages.configfile nella soluzione. Non l'ho scoperto prima di aver controllato il mio albero di lavoro git. Dopo aver ripristinato le modifiche nel file, il ripristino di Nuget funzionava di nuovo.


0

Esiste un collegamento per far funzionare Nuget, 1. Assicurati che la connessione Internet o gli URL Nuget siano corretti nel menu delle opzioni di VS Tools 2. Guarda la cartella .nuget o nuget nella soluzione, altrimenti copia da qualsiasi per ottenere nuget.exe

  1. ELIMINA le cartelle dei pacchetti, se esistenti

  2. Aprire la console di Gestione pacchetti eseguire questo comando

    • incolla il percorso completo di nuget.exe RIPRISTINA il percorso completo del file .sln!
  3. usa il comando Install-pacakge, se build non è riuscito a trovare riferimenti mancanti. Spero che aiuti (HIH)

0

In VS2017, fare clic con il tasto destro del mouse sulla soluzione => Apri CommandLine => Riga di comando per sviluppatori.

Una volta aperto, digitare (e premere Invio dopo)

dotnet restore

Ciò ripristinerà qualsiasi / tutti i pacchetti e otterrai una bella uscita della console di ciò che è stato fatto ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.