Nel precedente post ho fatto una breve introduzione a NuGet e alla sua installazione in Visual Studio 2010.
In questo post entro invece più in dettaglio sulla gestione dei package e su cosa avviene dietro le quinte.
La gestione dei package con NuGet
Per prima cosa per utilizzare tutti i comandi di NuGet è necessario che sia aperta una soluzione.
Nell’esempio ho creato una web application con nome NuGetTest.
A questo punto per installare, modificare o eliminare un package è possibile:
- Utilizzare il menù contestuale “Add library package reference” nel progetto
- Utilizzare la console “Package Manager Console” PowerShell
Gestire i package dalla finestra Add library package reference
La finestra “Add library package reference” è accessibile dal menù contestuale di ogni progetto.
Il suo contenuto e funzionamento è simile all’Extension manager di Visual Studio.
E’ possibile:
- Cercare un package online
- Installare un package
- Visualizzare i package installati
- Aggiornare un package a una nuova versione
- Rimuovere un package installato
Vediamo alcuni esempi concreti.
Esempio: aggiungere log4net tramite il library package reference
Nell’esempio ho scelto log4net
Premendo “Install” viene scaricato ed installato il package. Il risultato è il seguente:
- Viene creata una cartella packages nella root della soluzione
- Viene aggiunta una reference alla DLL
- Viene creato il file Packages.config nella root dell’applicazione
Dato che tutta la configurazione dei package installati è su file system all’interno della soluzione si ha immediatamente il vantaggio che è condivisa all’interno del sistema di versionamento (TFS, Subversion o Git ad esempio).
Rimuovere e aggiornare i package dalla finestra Library Package Reference
Dalla finestra Library Package Reference è possibile anche disinstallare un package oppure aggiornarlo a una nuova versione.
Ad esempio per rimuovere log4net è sufficiente visualizzare tutti i package installati e premere uninstall.
Anche l’aggiornamento di un package si fa con un paio di click. Si seleziona Updates e se sono disponibili degli aggiornamenti per un package installato è sufficiente premere Update.
Nell’esempio è stato installato il package NHibernate in versione beta. Nell’elenco degli updates compare la versione definitiva di NHibernate 3.
L’aggiornamento provvede automaticamente a rimuovere la vecchia libreria e a referenziare la nuova.
Gestire i package tramite la Package Manager Console
La package manager console è lo strumento più potente e flessibile per gestire i package.
Da riga di comando è possibile ad esempio scegliere la versione da installare oppure disinstallare un package forzando o no la rimozione dei package da cui dipende (solo se non utilizzati da altri package).
Digitando il comando
get-help about_NuGet
viene mostrato l’elenco dei comandi disponibili.
La guida completa è anche online su CodePlex a questo indirizzo:
http://nuget.codeplex.com/documentation?title=Package%20Manager%20Console%20Command%20Reference
Esempio: aggiungere NHibernate tramite la Package Console
Digitare il comando get-package. Viene visualizzato l’elenco dei package attualmente installati:
Il comando get-package –remote visualizza l’elenco dei package disponibili nel feed corrente (ricordo che di default si tratta del NuGet official package source).
Al momento in cui scrivo si ottiene una lista di circa 1000 package. E’ possibile filtrare la lista con l’opzione filter.
Ad esempio con il comando
get-package –remote –filter nhibernate
si ottiene la lista di tutti i package con nhibernate nel nome o nella descrizione:
A questo punto per installare il package NHibernate eseguire il comando:
install-package NHibernate
NB: il progetto in cui viene installato il package è quello selezionato nel menù a tendina “Default Project” nella console.
In questo caso va notato che il package di NHibernate ha 3 dipendenze:
- Iesi.Collections
- Antlr
- Castle.Core
e per ogni dipendenza è specificata la versione minima necessaria.
NuGet si accorge che le dipendenze non sono ancora installate e provvede automaticamente a scaricarle, installarle e configurarle.
A questo punto nella soluzione sono state aggiunte le nuove reference:
Viene inoltre aggiornato il file packages.config e la cartella packages nella root della soluzione:
Esempio: installare ELMAH
Eseguire adesso il comando
install-package elmah
In questo caso oltre alla solita configurazione delle reference è necessario modificare il web.config.
NuGet aggiunge in automatico una nuova configSection nel web.config
e configura i necessari httpmodules e httphandler:
Da notare che la configurazione è stata fatta correttamente sia per IIS 6 che per IIS 7.
Esempio: disinstallare ELMAH
Per disinstallare un package è sufficiente eseguire il comando:
uninistall-package
Ad esempio il comando uninstall-package ELMAH esegue in automatico questi passi:
– Rimuove la reference dal progetto
– Ripulisce il file web.config
– Rimuove l’entry dal file di configurazione package.config
– Rimuove la libreria dalla cartella packages
Aggiornare un package dalla Package Console
L’aggiornamento di un package dalla Package Console avviene con il comando:
update-package nomepackage
Ad esempio installando NHibernate in versione beta ed eseguendo il comando
update-package nhibernate
viene rimossa completamente la vecchia versione ed installata la nuova.
Riferimenti
CodePlex: http://nuget.codeplex.com/
Elenco dei comandi da console:
http://nuget.codeplex.com/documentation?title=Package%20Manager%20Console%20Command%20Reference
Phil Haack blog: http://haacked.com/tags/NuGet/default.aspx
Ciao Stefano,
il seguente link http://www.be-st.it/post/NuGet-semplifica-le-gestione-delle-librerie-nei-progetti-net.aspx ad inizio articolo non porta a nessuna pagina.
Ciao Francesco, ho sistemato il link.
Grazie mille per la segnalazione.