Alla scoperta di NuGet: introduzione

Scritto da  Giorgio Di Nardo il mercoledì 19 ottobre 2011
Linguaggio:    •  Framework: 3.5,4.0   •  Livello: 100


Cos'è NuGet?

NuGet è un'estensione di Visual Studio 2010 che rende più semplice aggiungere, rimuovere e aggiornare i riferimenti a librerie esterne in propri progetti basati sulla piattaforma .NET e realizzati in Visual Studio. Con NuGet è più semplice sia utilizzare librerie di terze parti all'interno dei propri progetti .NET, sia mettere a disposizione di altri sviluppatori le proprie librerie.

Chiunque si sia trovato in questa situazione - a meno di lavorare in un monastero sull'Himalaya penso più o meno tutti - sa che le cose non sono così semplici come potrebbe sembrare: in primo luogo si tratta di trovare nel mare magnum di Internet la libreria giusta, con la versione più aggiornata, scaricandola da una sorgente affidabile; bisogna poi estrarre il file sul disco, identificare e copiare tutti i file necessari (dll, js, css) ed aggiungere un riferimento all'interno del progetto; infine modificare opportunamente il file di configurazione aggiungendo i settaggi trovati sulla documentazione (che avete letto vero?).

Siamo quindi pronti ad utilizzare la nostra libreria, a patto che non abbia a sua volta dipendenze con altre librerie esterne. In caso contrario è necessario iterare il processo verificando per ogni libreria che la versione sia quella compatibile con gli altri componenti utilizzati.

Abbiamo appena concluso di configurare tutto l'ambiente… che esce una nuova versione della libreria costringendoci ripetere il processo per aggiornare tutti i riferimenti.

L'obiettivo di NuGet è proprio di automatizzare tutto questo processo lasciando allo sviluppare la possibilità di concentrarsi sull'utilizzo della libreria piuttosto che sulla sua installazione e configurazione.

Aggiungere un riferimento con e senza NuGet

Il fulcro del funzionamento di NuGet è rappresentato dai pacchetti: tutte le informazioni necessarie all'installazione di una libreria sono racchiuse in un pacchetto (in pratica in un file con estensione .nupkg). Un pacchetto include i file da copiare nel progetto di destinazione e un manifest che descrive il contenuto del pacchetto e le operazioni necessarie per aggiungere o rimuovere la libreria. I pacchetti sono raggruppati in feed a cui Visual Studio può accedere per fornire agli sviluppatori un elenco dei pacchetti disponibili. La sorgente principale a cui Visual Studio può attingere è il feed ufficiale di NuGet, ma è possibile istruire Visual Studio affinché attinga da feed esterni o anche creare un proprio repository personale.

Per condividere una propria libreria è quindi sufficiente realizzare un pacchetto NuGet e pubblicarlo in un repository NuGet da cui poi sarà recuperato (ed installato nel proprio progetto) da chiunque voglia farne uso.

In fase di installazione di un pacchetto, NuGet copia i file necessari all'interno del progetto e applica automaticamente tutte le modifiche indispensabili per il corretto funzionamento della libreria, come ad esempio impostare i riferimenti agli assembly importati o aggiornare il file di configurazione (app.config o web.config a seconda del tipo progetto). In fase di rimozione di un pacchetto, NuGet è in grado di rimuovere tutti i file aggiunti e di rimuovere tutte le modifiche apportate fino a ripristinare lo stato del progetto alla situazione precedente all'installazione.

Installare NuGet

NuGet può essere facilmente installato (e successivamente aggiornato) utilizzando l'Extension Manager di Visual Studio a cui è possibile accedere attraverso l'opzione Extension Manager… del menù Tools.

Menu Extension Manager

Nella dialog box dell'Extension Manager selezioniamo la scheda Online Gallery sulla sinistra e usando la casella di ricerca in alto a destra cerchiamo NuGet.

Dialog Extension Manager

Selezioniamo quindi il NuGet Package Manager e installiamolo per mezzo del pulsante Download confermando l'operazione cliccando sul pulsante Install.

Al termine dell'installazione riavviamo Visual Studio per consentire a NuGet di funzionare correttamente.

In alternativa è possibile installare NuGet direttamente dalla Visual Studio Gallery scaricando ed eseguendo il file .vsix. Anche in tal caso sarà necessario chiudere e riaprire le istanze di Visual Studio eventualmente in esecuzione.

Visual Studio Gallery

Utilizzare il dialog box Manage NuGet Packages

Ora che NuGet è installato e funzionante, il modo più semplice per cercare, installare, aggiornare e rimuovere pacchetti NuGet è senza dubbio quello di utilizzare la dialog box Manage NuGet Packages.

Cercare un pacchetto

Dopo aver aperto la nostra Web Application, nel Solution Explorer clicchiamo con il tasto destro sul nodo References e selezioniamo quindi Manage NuGet Packages… dal menù contestuale (se il nostro progetto è invece un Website possiamo eseguire la stessa operazione a partire dal nodo Bin).

Menu Manage NuGet Packages

La dialog box è divisa orizzontalmente in tre parti e presenta la stessa struttura che caratterizza l'Extension Manager di Visual Studio. Il menù a schede presente nella sezione di sinistra consente di accedere rapidamente alla lista dei pacchetti già installati nel progetto selezionato - Installed packages - a quelli referenziati di recente - Recent packages - o a quelli disponibili nei repository configurati - Online.

Clicchiamo sulla scheda Online.

Dialog Manage NuGet Packages - Online

Per impostazione predefinita i pacchetti vengono ordinati sulla base del maggior numero di download effettuati, in modo da mostrare già nella prima pagina i pacchetti generalmente più utilizzati. È comunque possibile cambiare l'ordinamento per mezzo del lista a cascata che si trova in cima scegliendo l'ordinamento alfabetico - Name: Ascending e Name: Descending - oppure quello basato sulla valutazione degli utenti - Highest Rated.

Sort By

Per quanto sia possibile scorrere la lista usando la barra di scorrimento sulla destra e i controlli di paginazione in fondo, è senza dubbio più rapido effettuare una ricerca per mezzo del controllo che si trova in alto a destra. In questo modo è possibile filtrare l'elenco dei pacchetti sulla base di una o più parole chiave rendendo quindi più agevole trovare il pacchetto giusto.

Proviamo a cercare il pacchetto ELMAH inserendo la parole "elmah" o "logging".

Dopo aver selezionato il pacchetto dalla lista è possibile consultare una serie di informazioni nella sezione di destra. Oltre ad una breve descrizione del contenuto, le informazioni riportano il nome del creatore del pacchetto, il numero di versione e la data di aggiornamento, il numero di download effettuati, la valutazione data dagli utenti (in genere purtroppo poco utile visto il bassissimo numero di valutazioni rispetto a quello dei download) e la presenza di eventuali dipendenze da altri pacchetti NuGet.

Installare un pacchetto

Per installare il pacchetto è sufficiente selezionarlo e cliccare sul pulsante Install.

Install ELMAH

Grazie alle informazioni presenti nel file manifest che descrive il pacchetto, NuGet è in grado di identificare l'albero delle dipendenze e di installare quindi sia il pacchetto selezionato che tutti quelli da cui questo dipende.

Alcuni pacchetti - come Ninject - potrebbero richiedere l'accettazione di una licenza. In tal caso viene mostrata una finestra di dialogo che consente di consultare i termini della licenza e di accettarli o declinarli (in quest'ultimo caso ovviamente l'installazione del pacchetto viene annullata).

License Acceptance

I file necessari vengono quindi copiati all'interno del progetto, i riferimenti alle librerie vengono aggiunti se necessario e i file di configurazione vengono opportunamente modificati.

Al termine dell'installazione il pulsante Install lascia spazio ad un'icona che indica il corretto completamento della procedura di installazione.

ELMAH Installed

Per meglio capire cosa è avvenuto dietro le quinte, esaminiamo nel dettaglio le modifiche apportate da NuGet al progetto dopo installazione del pacchetto ELMAH.

Intanto, come ovvio, è stato aggiunto un riferimento alle librerie installate con il pacchetto tra le References del progetto.

References ELMAH

In secondo luogo il file web.config è stato modificato con l'aggiunta delle impostazioni necessarie al corretto funzionamento di ELMAH.

Web.config ELMAH

Infine, nella cartella della soluzione - o in quella del progetto nel caso in cui il progetto non preveda una cartella specifica per la soluzione - NuGet ha creato una cartella packages che conterrà una sottocartella per ogni pacchetto installato.

Cartella packages

La sottocartella contiene tre diversi elementi: il file .nupkg che rappresenta il pacchetto, che poi altro non è se non un archivio .zip contenente tutti i file che lo compongono; una cartella bin nella quale si trovano gli assembly che saranno referenziati nel progetto; una cartella content nella quale si trovano i file aggiuntivi con la stessa alberatura con la quale saranno riportati da NuGet all'interno del progetto.

Cartella ELMAH

Aggiornare un pacchetto

La grande utilità di NuGet non si esaurisce con l'installazione di un pacchetto ma anzi fornisce un supporto fondamentale anche in fase di aggiornamento.

Apriamo nuovamente il dialog box Manage NuGet Packages e selezioniamo sulla sinistra la scheda Updates. Nell'elenco centrale saranno riportati tutti i pacchetti installati nel progetto per i quali è disponibile un aggiornamento.

Dialog Manage NuGet Packages - Updates

Come possiamo vedere pur avendo installato solo il pacchetto ELMAH - per il quale ovviamente non risultano aggiornamenti - NuGet ci propone l'aggiornamento di una nutrita serie di pacchetti. Ciò è dovuto al fatto che il template di Visual Studio con il quale vengono creati i progetti ASP.NET MVC non referenzia le varie libreria in maniera statica ma come pacchetti NuGet. In questo modo anche i componenti che fanno parte del template - come ad esempio jQuery o Entity Framework - possono essere facilmente gestiti ed aggiornati alla stessa stregua di quelli aggiunti successivamente.

Selezioniamo il pacchetto jQuery e clicchiamo sul pulsante Update per avviarne l'aggiornamento.

Update jQuery

L'ultima versione del pacchetto viene recuperata da NuGet e sostituita a quella precedentemente installata nel progetto. Se necessario NuGet provvede all'aggiornamento anche dei pacchetti aventi dipendenze con quello aggiornato. Al termine dell'operazione un'icona segnalerà tutti i pacchetti correttamente aggiornati.

jQuery Updated

Pur facendo un grosso lavoro, in alcuni casi NuGet potrebbe non essere in grado di completare tutte le operazioni realmente necessarie a garantire la completa transizione verso la nuova versione del pacchetto.

NuGet non è infatti in grado - almeno nella versione attuale - di modificare i file che compongono progetto - con l'eccezione dei file di configurazione, come abbiamo già visto - per aggiornare i riferimenti alle nuove versioni scaricate. È un problema che, ad esempio, può riguardare le librerie javascript che includono il numero di versione all'interno del nome del file .js, come nel caso di jQuery.

Il tal caso nella cartella Scripts troveremo il nuovo file mentre il tag script del file di layout continuerà a puntare al file vecchio. Sarà quindi necessario effettuare la modifica manualmente per continuare a garantire il corretto funzionamento dell'applicazione.

Riferimenti js in _Layout

Rimuovere un pacchetto

La necessità di rimuovere un pacchetto può nascere o dall'eliminazione delle funzioni applicative che ne richiedevano l'utilizzo o dall'obsolescenza del pacchetto stesso. È il caso del pacchetto jQuery.vsdoc che conteneva i file necessari all'Intellisense relativa a jQuery e che è stato integrato nel pacchetto core di jQuery. In fase di aggiornamento di jQuery all'interno del progetto viene quindi copiato il file README.jQuery.vsdoc.txt che segnala l'obsolescenza del pacchetto e invita alla sua rimozione.

Un pacchetto installato può essere rimosso dal progetto selezionando nel dialog box Manage NuGet Packages la scheda Installed Packages che come detto riporta l'elenco dei pacchetti installati nel progetto corrente.

Dialog Manage NuGet Packages - Uninstall

Selezioniamo il pacchetto jQuery Visual Studio 2010 IntelliSense e clicchiamo sul pulsante Uninstall. NuGet si occuperà della rimozione del pacchetto selezionato togliendo i riferimenti dalle References del progetto, eliminando i file eventualmente aggiunti e ripristinando i file di configurazione. La sottocartella con i file del pacchetto presente nella cartella packages sarà parimenti rimossa.

Così come in automatico NuGet è stato in grado di installare i pacchetti da cui quello selezionato dipendeva, così in fase di rimozione possiamo chiedere a NuGet di rimuovere dal progetto anche tali pacchetti aggiuntivi. Se ad esempio decidiamo di rimuovere il pacchetto ELMAH, veniamo interrogati da NuGet sulla possibilità di rimuovere anche i pacchetti da cui lo stesso dipende.

Uninstall dependencies

 


Tags: NuGet

 
x