2016-03-15 9 views
36

Ho una soluzione .net con circa 30 progetti, tutti destinati a .Net Framework 4.5. e ogni riferimento a almeno 3-4 pacchetti NuGet.Riformulare di Nuget dopo l'aggiornamento da .Net Framework 4.5 a 4.6.1

Ora dobbiamo aggiornarli su .Net Framework 4.6.1. Ecco cosa devo sapere:

  1. Devo riorientare i pacchetti NuGet o posso saltarlo perché questo sarà un aggiornamento "sul posto"?
  2. Se sì, posso semplicemente aggiornare il file packages.config per ogni progetto sostituendo targetFramework = "net45" con targetFramework = "net461" per ogni pacchetto NuGet? Ho visto alcuni thread che consigliano di disinstallare e quindi reinstallare il pacchetto tramite il comando 'update-package'. Ci ho provato oggi ma ho finito con alcuni errori.
+1

Modifica della targetFramework nel file packages.config non ha alcun effetto sui gruppi cui viene fatto riferimento nel progetto, supponendo che si sono non usando un .xproj, quindi fare ciò non sarebbe la modifica corretta. Direi che non molti pacchetti NuGet hanno assembly che si rivolgono esplicitamente a .NET 4.6, quindi ho il sospetto che nulla debba essere reindirizzato. Dovresti essere in grado di rivedere le directory lib dei tuoi pacchetti NuGet per vedere quali target hanno. –

+0

Così ho finito per aggiornare il 75% dei miei pacchetti NuGet alle loro ultime versioni. Pubblicare l'aggiornamento L'attributo targetFramework è stato automaticamente impostato su 'net461' per la maggior parte dei pacchetti. Ci sono alcuni pacchetti che aggiornerò in seguito e sembrano funzionare bene post l'aggiornamento. Grazie. L'aggiornamento – Vishal

+0

da 4.5. * A 4. * funzionerà in base alla progettazione: https://msdn.microsoft.it/it/us/library/ff602939% 28v = vs.110% 29.aspx – OzBob

risposta

57

I pacchetti non verranno reindirizzati automaticamente, ma esiste una correzione automatica per questo.

In Console Package Manager gestiscono semplicemente:

Update-Package -Reinstall 

Questo costringerà il gestore di pacchetti per reinstallare tutti i pacchetti in ogni progetto (senza cambiare la versione del pacchetto di riferimento).

Reinstallando i pacchetti dopo che il nuovo framework è mirato, questo cambia tutti i riferimenti alla versione corretta.

È inoltre possibile eseguire questo contro un singolo progetto con:

Update-Package -Reinstall -ProjectName Project.Name.Here 

Ho usato questa tecnica molte volte per risolvere i problemi di riferimento Nuget.

+9

Un commento per rendere questo un po 'più veloce. Aggiungi -IgnoreDependencies: 'Update-Package -Reinstall -IgnoreDependencies' – kenhundley

11

1 Trova tutti i file .csproj e sostituire

<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion> 

con

<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> 

2 Apri console Package Manager ed eseguire

Update-Package -Reinstall -IgnoreDependencies 

4 Trova tutte le soluzioni allora MSBuild ciascuno.

+0

Il passaggio 3 dovrebbe anche gestire automaticamente il passo 2 per _packages.config_. –

+0

@RayVega si prega di spiegare un po 'di più. Potresti modificare e mostrare come? – OzBob

+1

Se salto il passaggio 2 ma eseguo invece il passaggio 3 subito dopo il punto 1, tutti gli attributi _packages.config_ file 'targetFramework' _automaticamente_ vengono modificati per corrispondere al nuovo 'TargetFramework' di csproj. Almeno, questo è il modo in cui ha funzionato con me usando la versione 4.3.0.440 di nuget.exe e l'aggiornamento da 4.5 a 4.7. Essenzialmente, mi ha salvato del lavoro non dovendo modificare manualmente i file dei pacchetti per ogni progetto. –

0

fisso utilizzando -

Update-pacchetto -reinstall

enter image description here