Note sulla versione di NuGet 2.7

Note sulla versione | di NuGet 2.6.1 per WebMatrix

NuGet 2.7 è stato rilasciato il 22 agosto 2013.

Riconoscimenti

Si desidera ringraziare i seguenti collaboratori esterni per i contributi significativi a NuGet 2.7:

  1. [Mike Roth](http://www.codeplex.com/site/users/view/mxrss) (@mxrss)
    • Mostra l'URL della licenza quando si elencano i pacchetti e la dettagliosità.
  2. [Adam Ralph](http://www.codeplex.com/site/users/view/adamralph) (@adamralph)
    • [#1956](http://nuget.codeplex.com/workitem/1956) - Aggiungere l'attributo developmentDependency a packages.config e usarlo nel comando pack per includere solo i pacchetti di runtime
  3. [Rafael Nicoletti](http://www.codeplex.com/site/users/view/tkrafael) (@tkrafael)
    • Evitare la chiave delle proprietà duplicate nel comando nuget.exe pack.
  4. [Ben Phegan](http://www.codeplex.com/site/users/view/benphegan) (@BenPhegan)
    • [#2610](http://nuget.codeplex.com/workitem/2610) - Aumentare le dimensioni della cache del computer a 200.
  5. [Slava Trenogin](http://www.codeplex.com/site/users/view/derigel) (@derigel)
    • [#3217](http://nuget.codeplex.com/workitem/3217) - Correzione della finestra di dialogo NuGet che mostra gli aggiornamenti nella scheda errata
    • Correzione di Project.TargetFramework può essere null in ProjectManager
    • [#3248](http://nuget.codeplex.com/workitem/3248) - Correzione di SharedPackageRepository FindPackage/FindPackagesById avrà esito negativo in packageId inesistente
  6. [Kevin Boyle](http://www.codeplex.com/site/users/view/KevinBoyleRG) (@kevfromireland)
    • [#3234](http://nuget.codeplex.com/workitem/3234) - Abilitare il supporto per il progetto Nomad
  7. [Corin Blaikie](http://www.codeplex.com/site/users/view/corinblaikie) (@corinblaikie)
    • [#3252](http://nuget.codeplex.com/workitem/3252) - Correzione del comando push non riuscita con codice di uscita 0 quando il file non esiste.
  8. [Martin Veselý](http://www.codeplex.com/site/users/view/veselkamartin)
    • [#3226](http://nuget.codeplex.com/workitem/3226) - Correzione di un bug con il comando Add-BindingRedirect quando un progetto fa riferimento a un progetto di database.
  9. [Miroslav Bajtos](http://www.codeplex.com/site/users/view/miroslavbajtos) (@bajtos)
    • [#2891](http://nuget.codeplex.com/workitem/2891) - Correzione del bug del carattere jolly di analisi nuget.pack nell'attributo 'exclude' in modo non corretto.
  10. [Justin Dearing](http://www.codeplex.com/site/users/view/zippy1981) (@zippy1981)
    • [#3307](http://nuget.codeplex.com/workitem/3307) - Correzione del bug NuGet.targets che non passa $(Platform) a nuget.exe durante il ripristino dei pacchetti.
  11. [Brian Federici](http://www.codeplex.com/site/users/view/benerdin)
    • [#3294](http://nuget.codeplex.com/workitem/3294) - Correzione di un bug nel comando del pacchetto nuget.exe che consente l'aggiunta di file con lo stesso nome ma con maiuscole e minuscole diverse, causando infine un'eccezione "Item already exists".
  12. [Daniel Cazzulino](http://www.codeplex.com/site/users/view/dcazzulino) (@kzu)
    • [#2990](http://nuget.codeplex.com/workitem/2990) - Aggiungere la proprietà Version alla classe NetPortableProfile.
  13. [David Simner](https://www.codeplex.com/site/users/view/DavidSimner)
    • [#3460](https://nuget.codeplex.com/workitem/3460) - Correzione del bug NullReferenceException se requireApiKey = true, ma l'intestazione X-NUGET-APIKEY non è presente
  14. [Michael Friis](https://www.codeplex.com/site/users/view/friism) (@friism)
    • [#3278](https://nuget.codeplex.com/workitem/3278) - Correzione del file di destinazioni NuGet.Build in modo che funzioni correttamente in MonoDevelop
  15. [Pranav Krishnamoorthy](https://www.codeplex.com/site/users/view/pranavkm) (@pranav_km)
    • Migliorare le prestazioni dei comandi di ripristino aumentando la parallelizzazione

Funzionalità rilevanti nella versione

NuGet 2.7 introduce un nuovo approccio al ripristino dei pacchetti e supera anche un ostacolo importante: il consenso per il ripristino dei pacchetti è ora attivo per impostazione predefinita. La combinazione del nuovo approccio e del consenso implicito semplifica drasticamente gli scenari di ripristino dei pacchetti.

Con NuGet versioni 2.0, 2.1, 2.2, 2.5 e 2.6, gli utenti devono consentire esplicitamente a NuGet di scaricare pacchetti mancanti durante la compilazione. Se questo consenso non fosse stato fornito in modo esplicito, le soluzioni che avevano abilitato il ripristino del pacchetto non riuscirebbero a compilare fino a quando l'utente non aveva concesso il consenso.

A partire da NuGet 2.7, il consenso per il ripristino dei pacchetti è ATTIVATO per impostazione predefinita, consentendo agli utenti di rifiutare esplicitamente il ripristino del pacchetto, se necessario, usando la casella di controllo nelle impostazioni di NuGet in Visual Studio. Questa modifica per il consenso implicito influisce su NuGet negli ambienti seguenti:

  • Visual Studio 2013 Preview
  • Visual Studio 2012
  • Visual Studio 2010
  • utilità della riga di comando nuget.exe

Ripristino automatico dei pacchetti in Visual Studio

A partire da NuGet 2.7, NuGet scaricherà automaticamente i pacchetti mancanti durante la compilazione in Visual Studio, anche se il ripristino del pacchetto non è stato abilitato in modo esplicito per la soluzione. Questo ripristino automatico dei pacchetti viene eseguito in Visual Studio quando si compila un progetto o la soluzione, ma prima che MSBuild venga richiamato. In questo modo si ottengono alcuni vantaggi significativi:

  1. Non è più necessario usare il movimento "Abilita ripristino pacchetti NuGet" nella soluzione
  2. Non è necessario modificare i progetti e NuGet non apporta modifiche al progetto per assicurarsi che il ripristino del pacchetto sia abilitato
  3. Tutti i pacchetti NuGet, inclusi quelli che includevano le importazioni di MSBuild per i file props/targets, verranno ripristinati prima che MSBuild venga richiamato, assicurandosi che tali proprietà/destinazioni vengano riconosciute correttamente durante la compilazione

Per usare il ripristino automatico dei pacchetti in Visual Studio, è sufficiente eseguire una sola azione (in):To use Automatic Package Restore in Visual Studio, you only need to take one (in)action:

  1. Non archiviare la packages cartella

Esistono diversi modi per omettere la packages cartella dal controllo del codice sorgente. Per altre informazioni, vedere l'argomento Pacchetti e controllo del codice sorgente.

Anche se tutti gli utenti sono esplicitamente acconsentiti al ripristino automatico dei pacchetti, è possibile rifiutare esplicitamente le impostazioni di Gestione pacchetti in Visual Studio.

Package Manager Settings

Ripristino semplificato dei pacchetti dalla riga di comando

NuGet 2.7 introduce una nuova funzionalità per nuget.exe: nuget.exe restore

Questo nuovo comando Ripristina consente di ripristinare facilmente tutti i pacchetti per una soluzione con un singolo comando, accettando un file di soluzione o una cartella come argomento. Inoltre, tale argomento è implicito quando è presente solo una singola soluzione nella cartella corrente. Ciò significa che tutte le operazioni seguenti provengono da una cartella che contiene un singolo file di soluzione (MySolution.sln):

  1. nuget.exe ripristino MySolution.sln
  2. nuget.exe ripristinare .
  3. nuget.exe ripristino

Il comando Ripristina aprirà il file della soluzione e troverà tutti i progetti all'interno della soluzione. Da qui, troverà i packages.config file per ognuno dei progetti e ripristinerà tutti i pacchetti trovati. Ripristina anche i pacchetti a livello di soluzione presenti nel .nuget\packages.config file. Altre informazioni sul nuovo comando Di ripristino sono disponibili in Informazioni di riferimento sulla riga di comando.

Flusso di lavoro di ripristino del nuovo pacchetto

Queste modifiche apportate al ripristino dei pacchetti sono entusiasti, in quanto introduce un nuovo flusso di lavoro. Se si desidera omettere i pacchetti dal controllo del codice sorgente, è sufficiente non eseguire il commit della packages cartella. Gli utenti di Visual Studio che aprono e compilano la soluzione vedranno i pacchetti ripristinati automaticamente. Per le compilazioni della riga di comando, è sufficiente richiamare prima di richiamare nuget.exe restoremsbuild. Non è più necessario ricordare di usare il movimento "Abilita ripristino pacchetti NuGet" nella soluzione e non sarà più necessario modificare i progetti per modificare la compilazione. Questo offre anche un'esperienza molto migliorata per i pacchetti che includono importazioni MSBuild, soprattutto per le importazioni aggiunte tramite la funzionalità recente di NuGet per l'importazione automatica di file props/targets dalla cartella \build.

Oltre al lavoro svolto da noi stessi, stiamo lavorando anche con alcuni partner importanti per arrotondare questo nuovo approccio. Non abbiamo ancora sequenze temporali concrete per nessuno di questi, ma ogni partner è così eccitato come stiamo parlando del nuovo approccio.

  • Team Foundation Service: sta lavorando per integrare la chiamata a nuget.exe restore negli scenari di compilazione predefiniti.
  • Siti Web di Windows Azure: stanno lavorando per consentire di eseguire il push del progetto in Azure e di nuget.exe restore chiamare prima che il sito Web venga compilato.
  • TeamCity: stanno aggiornando il plug-in del programma di installazione NuGet per TeamCity 8.x
  • AppHarbor: stanno lavorando per consentire il push del repository ad AppHarbor e hanno nuget.exe restore chiamato prima che la soluzione venga compilata.

Con ognuno dei partner precedenti, userebbero la propria copia di nuget.exe e non sarebbe necessario portare nuget.exe nella soluzione.

Problemi noti

Si sono verificati due problemi noti con nuget.exe ripristino con la versione iniziale 2.7, ma sono stati risolti il 9/6/2013 con un aggiornamento del pacchetto NuGet.CommandLine. Questo aggiornamento è disponibile anche in [NuGet 2.7 download page](https://nuget.codeplex.com/releases/view/107605) CodePlex. L'esecuzione nuget.exe update -self verrà aggiornata alla versione più recente.

Il problema è stato risolto:

  1. [New package restore doesn't work on Mono when using SLN file](https://nuget.codeplex.com/workitem/3596)
  2. [New package restore doesn't work with Wix projects](https://nuget.codeplex.com/workitem/3598)

Esiste anche un problema noto con il nuovo flusso di lavoro di ripristino del pacchetto in cui [Automatic Package Restore does not work for projects under a solution folder](https://nuget.codeplex.com/workitem/3625). Questo problema è stato risolto in NuGet 2.7.1.

Errori di reindirizzamento e aggiornamento della compilazione del progetto/avvisi

Molte volte dopo il retargeting o l'aggiornamento del progetto, si scopre che alcuni pacchetti NuGet non funzionano correttamente. Sfortunatamente, non c'è alcuna indicazione di questo e poi non ci sono indicazioni su come risolverlo. Con NuGet 2.7, ora usiamo alcuni eventi di Visual Studio per riconoscere quando il progetto è stato ridefinito o aggiornato in modo da influire sui pacchetti NuGet installati.

Se si rileva che uno dei pacchetti è stato interessato dalla ridestinazione o dall'aggiornamento, verranno generati errori di compilazione immediati per informare l'utente. Oltre all'errore di compilazione immediato, viene mantenuto anche un requireReinstallation="true" flag nel packages.config file per tutti i pacchetti interessati dal reindirizzamento e ogni compilazione successiva in Visual Studio genererà avvisi di compilazione per tali pacchetti.

Anche se NuGet non può eseguire azioni automatiche per reinstallare i pacchetti interessati, speriamo che questa indicazione e avviso consentano di individuare quando è necessario reinstallare i pacchetti. Microsoft sta lavorando anche alla documentazione di materiale sussidiario sulla reinstallazione dei pacchetti a cui questi messaggi di errore indirizzano l'utente.

Impostazioni predefinite della configurazione nuGet

Molte aziende usano internamente NuGet, ma hanno avuto difficoltà a guidare i propri sviluppatori a usare origini di pacchetti interne invece di nuget.org. NuGet 2.7 introduce una funzionalità di impostazioni predefinite di configurazione che consente di specificare le impostazioni predefinite a livello di computer per:

  1. Origini pacchetto abilitate
  2. Origini dei pacchetti registrate, ma disabilitate
  3. Origine push predefinita nuget.exe

Ognuno di questi può ora essere configurato all'interno di un file che si trova in %ProgramData%\NuGet\NuGetDefaults.Config. Se questo file di configurazione specifica le origini dei pacchetti, l'origine del pacchetto predefinita nuget.org non verrà registrata automaticamente e quelle in NuGetDefaults.Config verranno invece registrate.

Anche se non è necessario usare questa funzionalità, si prevede che le aziende distribuiscano NuGetDefaults.Config file usando Criteri di gruppo.

Si noti che questa funzionalità non causerà mai la rimozione di un'origine del pacchetto dalle impostazioni NuGet di uno sviluppatore. Se dunque lo sviluppatore ha già usato NuGet e quindi l'origine del pacchetto nuget.org è già registrata, non verrà rimossa dopo la creazione di un file NuGetDefaults.Config.

Per altre informazioni su questa funzionalità, vedere Impostazioni predefinite di configurazione NuGet.

Ridenominazione dell'origine pacchetto predefinita

NuGet ha sempre registrato un'origine del pacchetto predefinita denominata "Origine pacchetto ufficiale NuGet" che punta a nuget.org. Questo nome era dettagliato e non specificava dove puntava effettivamente. Per risolvere questi due problemi, questa origine del pacchetto è stata rinominata semplicemente "nuget.org" nell'interfaccia utente. Anche l'URL per l'origine del pacchetto è stato modificato in modo da includere il prefisso "www". Dopo aver usato NuGet 2.7, l'origine del pacchetto ufficiale NuGet esistente verrà aggiornata automaticamente a "nuget.org" come nome e "https://www.nuget.org/api/v2/" come URL.

Miglioramenti delle prestazioni

Sono stati apportati alcuni miglioramenti delle prestazioni nella versione 2.7, che produrranno un footprint di memoria inferiore, meno utilizzo del disco e un'installazione più rapida dei pacchetti. Sono state anche eseguite query più intelligenti nei feed basati su OData, riducendo così il payload complessivo.

Nuove API di estendibilità

Sono state aggiunte alcune nuove API ai servizi di estendibilità per colmare le lacune delle funzionalità mancanti nelle versioni precedenti.

IVsPackageInstallerServices

// Checks if a NuGet package with the specified Id and version is installed in the specified project.
bool IsPackageInstalledEx(Project project, string id, string versionString);

// Get the list of NuGet packages installed in the specified project.
IEnumerable<IVsPackageMetadata> GetInstalledPackages(Project project);

IVsPackageInstaller

// Installs one or more packages that exist on disk in a folder defined in the registry.
void InstallPackagesFromRegistryRepository(string keyName, bool isPreUnzipped, bool skipAssemblyReferences, Project project, IDictionary<string, string> packageVersions);

// Installs one or more packages that are embedded in a Visual Studio Extension Package.
void InstallPackagesFromVSExtensionRepository(string extensionId, bool isPreUnzipped, bool skipAssemblyReferences, Project project, IDictionary<string, string> packageVersions);

Dipendenze solo sviluppo

Questa funzionalità è stata fornita da Adam Ralph e consente agli autori di pacchetti di dichiarare le dipendenze usate solo in fase di sviluppo e non richiedono dipendenze del pacchetto. L'aggiunta di un developmentDependency="true" attributo a un pacchetto in packages.confignuget.exe pack non includerà più tale pacchetto come dipendenza.

Rimozione del supporto per Visual Studio 2010 Express per Windows Telefono

Il nuovo modello di ripristino dei pacchetti nella versione 2.7 viene implementato da un nuovo VSPackage diverso dal vsPackage NuGet principale. A causa di un problema tecnico, questo nuovo VSPackage non funziona correttamente nello SKU di Visual Studio 2010 Express per Windows Telefono perché condividiamo la stessa codebase con altri SKU di Visual Studio supportati. Pertanto, a partire da NuGet 2.7, si elimina il supporto per Visual Studio 2010 Express per Windows Telefono dall'estensione pubblicata. Il supporto per Visual Studio 2010 Express for Web è ancora incluso nell'estensione primaria pubblicata nella raccolta di estensioni di Visual Studio.

Poiché non si è certi del numero di sviluppatori che usano ancora NuGet in tale versione/edizione di Visual Studio, si sta pubblicando un'estensione di Visual Studio separata specificamente per tali utenti e pubblicandola in CodePlex (anziché in Visual Studio Extension Gallery). Non si prevede di continuare a mantenere tale estensione, ma se ciò influisce su di noi, segnalare un problema in CodePlex.

Per scaricare il Gestione pacchetti NuGet (per Visual Studio 2010 Express per Windows Telefono), visitare la [NuGet 2.7 Downloads](https://nuget.codeplex.com/releases/view/107605) pagina.

Correzioni di bug

Oltre a queste funzionalità, questa versione di NuGet include anche molte altre correzioni di bug. Nella versione sono stati risolti 97 problemi totali. Per un elenco completo degli elementi di lavoro corretti in NuGet 2.7, visualizzare .[NuGet Issue Tracker for this release](https://nuget.codeplex.com/workitem/list/advanced?release=NuGet%202.7&status=all)