Sicuramente la parola NuGet, precedentemente conosciuto come NuPack, non è un termine nuovo per i tecnici; non avendo però mai avuto modo di parlarne colgo l’occasione per scrivere questo post, che riassume un po’ il suo funzionamento e ne spiega gli scenari d’uso.
In primis NuGet è un’extension free per Visual Studio 2010, quindi per chi non utilizza questa release di VS questo post può risultare poco utile. Lo scopo dell’extension è di agevolare lo sviluppatore nell’utilizzo di Framework esterni, principalmente Open Source all’interno dei propri progetti C# o VB.
Ogni mia solution utilizza diversi pacchetti come NHibernate, ConfORM, Castle, JQuery etc, e, specie in fase di startup, è necessario aggiungere queste librerie sia ad ogni progetto sia al source control;
NuGet facilita parecchio questa fase permettendoci con pochi click, di completare gli step descritti precedentemente, ma anche di aggiornare le librerie a versioni più recenti con estrema facilità.
Installazione:
Essendo questo tool sviluppato dal team di ASP.NET/MVC, l’istallazione è disponibile sia tramite gli ASP.NET MVC 3 Tools Update (download qui) che tramite la gallery delle extension di Visual Studio (qui). Se siete sviluppatori web consiglio l’installazione di NuGet insieme ad MVC, che include altre ottime features per il mondo “WWW”; se invece il vostro target di sviluppo non è il web, sicuramente l’installazione della singola extension è la soluzione migliore.
Utilizzo:
Una volta installato il tutto è possibile utilizzare NuGet in due differenti modi:
- Riga di comando direttamente dentro Visual Studio (molt geek ma poco utile a mio avviso);
- Tramite l’apposita UI.
Se si opta per la prima soluzione basta digitare all’interno della finestra “Package Manager Console” (disponibile dopo l’installazione di NuGet dal menu View => Other Windows) il comando “Install-Package”, seguito dal nome del package da installare. Supponendo di voler installare jquery, il codice da scrivere deve essere il suguente:

Se invece si opta per l’utilizzo tramite la UI di Visual Studio è sufficiente andare sul progetto desiderato e, cliccando con il tasto destro sulle reference, premere “Add Library Package Reference” e ricercare JQuery, come mostrato dagli screenshot seguenti:




Dipendenze:
Oltre al download della singola libreria, NuGet si occupa di fornire al nostro download anche le dipendenze del package scelto. Riferendosi ad un esempio pratico, se si prova a scaricare Castle Windsor verrà scaricato anche il package di Castle.Core, in quanto necessario al funzionamento del primo; il tutto risulterà come una duplice installazione di librerie tramite NuGet, ossia è come installare prima Castle.Core e poi Castle.Windsor. Lo screenshot seguente mostra la dipendenza:

FileSystem:
Ovviamente, tutti i package installati nelle nostre solution devono essere fruibili anche in assenza di connessione, e questo significa che esiste una copia in locale all’interno del proprio FileSystem. Il comportamento di default di NuGet è quello di copiare tutte le librerie all’interno della folder (packages) presente nella stessa folder della solution.
Purtroppo nella versione attuale di NuGet (la 1.3, e ricordiamoci che stiamo parlando di un “prodotto” in beta) non esiste ufficialmente la possibilità di specificare in che folder devono essere installati i package. Alcune settimane fa il buon Andrea ha postato un “trick” che permette di cambiare i settings di NuGet e poter gestire liberamente il path che conterrà le librerie. Come detto dal PM del progetto Phil Haack qui:

Le prossime release saranno incompatibili con la soluzione descritta da Andrea. Speriamo di avere a disposizione una soluzione alternativa.
Gallery:
Ovviamente è già disponibile un gran numero di package che si possono utilizzare liberamente, ed esiste un apposito sito che ci consente di consultare l’archivio e di lasciare dei feedback sulle varie librerie o di caricarne di nuove. Il sito in questione è http://www.nuget.org




Estendibilità:
NuGet è fortemente basato su feed xml per la consultazione dei package disponibili e, andando sui suoi setting, potete aggiungere feed custom per installazione di pacchetti “privati”, e quindi utilizzare questa potente extension anche per librerie non open source o non rilasciate pubblicamente.
Sul sito di Codeplex (http://nuget.codeplex.com) è disponibile un’ottima documentazione che, tra le tante info, spiega come creare ed “hostare” un proprio feed all’interno di Nuget (vedi qui).
Considerazioni:
Sinceramente rientra tra i “Must Have” e, una volta rotto il ghiaccio, è difficile farne a meno. Una cosa che sicuramente sarebbe carina è la possibilità di configurare i package per il singolo download. Per esempio è possibile utilizzare NHIbernate con diversi proxy (LingFu, Castle, etc.), e in NuGet trovate tanti pacchetti quante sono le opzioni. Sicuramente la possibilità di personalizzarsi il package può essere di aiuto nello “sfoltire” una gallery molto grande.