rimuovere il ripristino del pacchetto nuget dalla soluzione


148

Ho aggiunto la recente funzione di ripristino del pacchetto nuget a una soluzione utilizzando "Abilita ripristino pacchetto NuGet": http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Tuttavia ha rotto il mio server di build e non ho avuto il tempo di ripararlo, quindi volevo rimuoverlo. Per quanto ne so, non esiste alcuna opzione, quindi ho rimosso manualmente la seguente riga da tutti i miei file * .csproj:

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

Il problema ora è che ogni volta che i miei file * .csproj vengono estratti o aperti la mia soluzione, la riga viene automaticamente aggiunta di nuovo, interrompendo la mia build se accedo accidentalmente :(

Qualche idea su come posso rimuoverlo permanentemente?

AGGIORNAMENTO: nonostante la risposta sotto continui a tornare quando si apre la soluzione, qualcuno con lo stesso problema?


2
Non puoi semplicemente ripristinare il changeset nel controllo del codice sorgente?
Betty,

beh, è ​​stato un grosso cambiamento, ma grazie al tuo commento ho dato un'occhiata e sembra che abbia aggiunto anche una cartella .nuget nel percorso della soluzione, cancellato anche per vedere se risolve il problema
Wiebe Tijsma

Sei riuscito a riparare il server di build? (ed è teamcity?), perché la riga del progetto di importazione che citi sopra è ciò che sta causando il fallimento delle mie build di teamcity
Baldy,

@Baldy No stiamo usando TFS Build e non ho davvero cercato una soluzione, l'ho rimossa (
sto

3
Ho creato un problema per il team NuGet per risolvere questo problema. Per favore, votalo
deadlydog

Risposte:


214

Non ho avuto un bell'aspetto, c'è un'altra proprietà aggiunta ai file di progetto:

<RestorePackages>true</RestorePackages>

Devi solo rimuovere questo e tutte queste righe manualmente da tutti i file * .csproj:

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

AGGIORNARE:

Si scopre che è un piccolo problema persistente, se stai modificando manualmente i file di progetto, assicurati di chiudere la soluzione ed eliminare tutte le linee dal progetto in una volta , altrimenti vengono aggiunti di nuovo una volta ricaricato il progetto ...

UPDATE2:

Elimina anche la cartella .nuget dalla radice della soluzione

Update3:

Una versione successiva di NuGet aggiunge un'altra sezione che è necessario rimuovere:

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

Update4

All'interno di NuGet.Targetssituato nella .nugetcartella, c'è un'altra sezione che viene aggiunta a nuovi progetti ... commuta su falso.

<!-- We need to ensure packages are restored prior to assembly resolve -->
<BuildDependsOn Condition="$(RestorePackages) == 'false'">
    RestorePackages;
    $(BuildDependsOn);
</BuildDependsOn>

7
Ho scoperto che c'è anche un <Import Project="$(SolutionDir)\.nuget\nuget.targets" />alla fine del file .csproj che deve essere rimosso manualmente.
TimDog

6
HA! indietreggia lentamente :)
TimDog

5
Anche questa cosa mi ha tormentato. Se i tuoi progetti si trovano in molte soluzioni diverse, la funzione di ripristino del pacchetto causa un mucchio di problemi.
Damian,

7
"Assicurati di chiudere la soluzione" in realtà è di fondamentale importanza qui, poiché VS2010 sembra memorizzare nella cache i file csproj / msbuild (senza raccogliere alcune modifiche). Non ho notato questo comportamento in VS2012, ma questo mi ha afflitto molto quando ho modificato questi file in VisualStudio.
Xavier Decoster l'

4
Ho creato un problema per il team NuGet per risolvere questo problema. Per favore, votalo
deadlydog

48

Per disabilitare il ripristino del pacchetto Nuget:

  1. Elimina la cartella .nuget
  2. Rimuovere le linee specifiche da tutti i file .csproj

Linee da rimuovere:

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

Nota: assicurarsi di apportare tutte le modifiche in una volta sola prima di ricaricare la soluzione, altrimenti le aggiungerà nuovamente.

Questo si basa sul seguente articolo: http://bartwullems.blogspot.no/2012/08/disable-nuget-package-restore.html

Inoltre, potresti voler ricontrollare che questa opzione è disabilitata: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages


Ho creato un problema per il team NuGet per risolvere questo problema. Per favore, vota su nuget.codeplex.com/workitem/3756
deadlydog

1
Grazie, per me era solo un'incapacità di questa opzione
Maarten Kieft,

Ho usato lo strumento IFix con grande successo nel ripulire i repository con molti progetti. Fondamentalmente automatizza questi passaggi. visualstudiogallery.msdn.microsoft.com/...
angularsen

La cartella .nuget è nascosta ed è necessario rimuoverla dalla directory non solo dal progetto.
Erik Bergstedt,

8

Non è questa impostazione qui?

Opzioni ... -> Nuget Package Manager -> [deseleziona] Consenti a Nuget di scaricare i pacchetti mancanti

inserisci qui la descrizione dell'immagine

Sto usando Visual Studio Professional + Resharper 8.2


Ho eliminato la cartella dei pacchetti e cancellato la cache dei pacchetti per risolvere il mio problema. Grazie!
Tresto,

1
No, non aggiorna i file .proj dopo - quindi il problema ritorna - ma bene farlo anche qui :-)
schmoopy,

La finestra di output mostra questo durante la costruzione: Restoring NuGet packages... To prevent NuGet from restoring packages during build, open the Visual Studio Options dialog, click on the Package Manager node and uncheck 'Allow NuGet to download missing packages during build.'è solo una conferma che questa dovrebbe essere la strada da percorrere.
Musulmano Ben Dhaou,

1
Questo non è correlato a Nuget Package Restore. Le vecchie versioni di VS avevano una voce di menu di scelta rapida per i progetti intitolata "Abilita ripristino pacchetto Nuget" che avrebbe creato una .nuget/cartella e modificato il tuo .csprojper fare riferimento a un .targetsfile. Avresti dovuto impegnarti con il nuget.exetuo VCS (eww, risolvendo il problema che Nuget risolve!) E bruttezza del genere. Oggi msbuild /restoreesiste e ripristina il pacchetto integrato di VS. L'OP sta chiedendo come rimuovere il vecchio, cattivo modo di fare le cose, non come disabilitare il corretto supporto per il ripristino del pacchetto integrato di VS.
binki,

5

Le soluzioni che attualmente utilizzano il ripristino del pacchetto integrato in MSBuild possono essere migrate al ripristino automatico del pacchetto. Da quello che ho capito, questo dovrebbe aiutare coloro che stanno riscontrando problemi di creazione di elementi della configurazione. (Per favore, correggimi se sbaglio).

Fare riferimento al documento sul sito Web di nuget: Migrazione di soluzioni integrate con MSBuild per utilizzare il ripristino automatico dei pacchetti all'indirizzo http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

Ci sono informazioni lì per la conversione con e senza TFS.

David Ebbo ha anche pubblicato alcune informazioni su http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html



3

NuGet ha un post sul blog sulla migrazione al ripristino automatico dei pacchetti: http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

Nel post del blog è presente uno script PowerShell che si occuperà della rimozione automatica (e ricorsiva) delle righe necessarie : https://github.com/owen2/AutomaticPackageRestoreMigrationScript/blob/master/migrateToAutomaticPackageRestore.ps1

L'offerta di un'opzione Disabilita ripristino pacchetto NuGet direttamente è contrassegnata come Non risolto: https://nuget.codeplex.com/workitem/1883


2

Ho seguito la soluzione accettata invano usando il 2012. Tuttavia, ha funzionato,

  1. Chiudi completamente il VS
  2. Aggiorna il <RestorePackages>true</RestorePackages>to <RestorePackages>false</RestorePackages>ed elimina la <Import Project="$(SolutionDir)\.nuget\nuget.targets" />riga
  3. Rinominato anche il nuget.exetonuget.exe.NotExe

2

Per chiunque abbia ancora bisogno di ripulire un progetto usando il vecchio ripristino del pacchetto NuGet, lo strumento IFix disponibile qui automatizza il processo.

Basta eseguire il programma di installazione ( IFixverrà aggiunto a PATH) e quindi eseguire quanto segue:

IFix nugetrestore --fix

Puoi eseguirlo prima in modalità di controllo per vedere cosa ripulirà:

IFix nugetrestore --check

1

Ho avuto lo stesso problema. Quello che ho finito per fare: 1) andare in ogni file .csproj di progetto nella soluzione, aprirlo nel blocco note, quindi rimuovere la parte del file XML e salvato.

2) Quindi ho rimosso tutti i file package.config nell'intera soluzione.

3) Quindi ho dovuto rimuovere le cartelle .nuget e package.

A questo punto, avevo una soluzione completamente NuGet gratuita.

4) Quindi ho fatto riferimento manualmente a tutte le DLL necessarie e ho cliccato per compilare e la soluzione ha funzionato come un campione senza che siano necessari i pacchetti NuGet.


1

Vai alla directory della soluzione in cui hai la [$(SolutionDir)\.nuget\nuget.targets] .nugetcartella e il nuget.targetsfile sotto di essa cancella la cartella e cambia rimuovi le linee dal tuo csproj per l'ultima volta.

Il problema non tornerà più a disturbarti.


1

Rimuovere il file packages.config dalla soluzione.


0

Ho abilitato per errore questa opzione di "ripristino del pacchetto" durante l'apertura del mio progetto in VS2012 RC e ho iniziato a ricevere errori simili a:

"Errore 1 Impossibile trovare 'C: \ FolderX \ SomeProject.nuget \ nuget.exe'"

Per correggere l'errore ho seguito le istruzioni precedenti, ho aperto tutti i file di progetto nel blocco note e ho rimosso la riga RestorePackage.


0

Sono stato in grado di risolvere questo problema seguendo questi passaggi:

1) assicurati di fare un backup di tutte le modifiche dei tuoi file estratti attualmente.

2) eliminare fisicamente la cartella della soluzione da C: \ (percorso mappato a TFS).

3) Ricevi le ultime novità da TFS per la tua soluzione.

4) copia (se presente) le modifiche dal backup eseguito nel passaggio 1.

spero che aiuti !


-2

Mi sono imbattuto nello stesso identico problema e ho provato a rimuovere tutti i tag .nuget e RestorePackage dai file di progetto, ma un progetto non sarebbe stato ricaricato, non importa quanto accuratamente lo abbia esaminato per i tag .nuget e RestorePackages. Immagino che ci siano alcuni riferimenti nascosti a questo da qualche parte.

Alla fine è stato più semplice copiare i file e creare un nuovo progetto e importarlo nella soluzione.


-8

Nuget fa schifo. Basta rimuovere i nuget e rimuovere o commentare gli elementi del pacchetto da packages.config nella directory principale dei progetti in cui questo è un problema. Utilizzare invece riferimenti diretti in alcune cartelle lib.

<?xml version="1.0" encoding="utf-8"?>
  <packages>
    <!--<package id="EntityFramework" version="6.0.2" targetFramework="net45" />-->
  </packages>

"Fa schifo", come qualsiasi altro prodotto, se non sai come usarlo e non fai uno sforzo per capirlo.
Wiebe Tijsma,

Questo è certo, ma secondo la mia opinione la scelta non ti dà abbastanza controllo sul tuo progetto. Anche la GUI di Nuget necessita di alcuni aggiornamenti importanti. 1. Non è intuitivo, 2. È difficile gestire il pacchetto 3. È difficile disattivare il ripristino 4. Scarica i pacchetti non necessari 5. A volte non è in grado di ripristinare i pacakges
Igor N

Sono d'accordo in una certa misura, anche se penso che sia davvero meglio non avere alcun gestore di pacchetti. Sembra che stiano lavorando ai seri aggiornamenti della GUI per nuget 3.0: blog.nuget.org/20141112/nuget-3.0-preview.html
Wiebe Tijsma,
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.