Tag Archives: NuGet

TeamCity 7.0 crea e distribuisce pacchetti NuGet

Sono incappato nelle release notes del nuovo TeamCity versione 7.0 rilasciato il 22 febbraio.

Solo per esclamare: NOOOO!! Quando ho letto che “Non solo TeamCity può creare dei package NuGet ma può anche fare lui stesso da server NuGet”.

Proprio oggi parlavo di TeamCity da un cliente e poi il discorso è caduto anche su NuGet e gli ho fatto notare come sia uno strumento eccezionale per distribuire dei package all’interno dell’azienda.

Pensare al connubio tra TeamCity e NuGet mi fa correre ad installarlo subito.

FacebookTwitterGoogle+Share

Tip: non fare il deploy del file packages.config di NuGet

Il file packages.config contiene l’elenco di tutti i package NuGet installati nel progetto e si trova nella root del progetto stesso.

Di default il file ha come Build Action il valore “Content”.

Questo vuol dire che quando si effettua un deploy automatico di una web application (ad esempio sfruttando il publish di Visual Studio) anche il file packages.config viene copiato nell’ambiente di destinazione.

Consiglio quindi di impostare la Build Action a “None” in tutti i progetti.

Aggiornare in automatico i package NuGet in tutti i progetti della soluzione Visual Studio

Difficilmente una soluzione Visual Studio contiene solo un progetto.

Supponiamo di avere una soluzione con due class library project A e B e di aggiungere il package NHibernate versione 3.1.0.4000 ad entrambi i progetti.

Se si utilizza NuGet out of the box e si esegue il comando (sul progetto A)

 

Update-Package NHibernate

 

verranno aggiornate solo le reference del progetto A e non del progetto B.

E’ quindi necessario eseguire manualmente l’update su tutti i progetti che usano un certo package.

Per aggiornare tutti i progetti che utilizzano uno specifico package è possibile installare preventivamente il package NuGetPackageUpdater che si occupa proprio di aggiornare in automatico tutti i progetti che utilizzano un determinato package.

Eseguendo quindi il comando

 

Update-Package NHibernate

 

si ottiene questo risultato:

PM> update-package NHibernate

Updating NHibernate in all referenced projects

‘Iesi.Collections (= 3.2.0.2001)’ not installed.

Attempting to retrieve dependency from source…

Done.

Successfully installed ‘Iesi.Collections 3.2.0.2001′.

Successfully installed ‘NHibernate 3.2.0.2001′.

Successfully removed ‘NHibernate 3.1.0.4000′ from ClassLibraryA.

Successfully removed ‘Iesi.Collections 3.1.0.4000′ from ClassLibraryA.

Successfully added ‘Iesi.Collections 3.2.0.2001′ to ClassLibraryA.

Successfully added ‘NHibernate 3.2.0.2001′ to ClassLibraryA.

‘NHibernate 3.2.0.2001′ already installed.

Successfully removed ‘NHibernate 3.1.0.4000′ from ClassLibraryB.

Successfully removed ‘Iesi.Collections 3.1.0.4000′ from ClassLibraryB.

Successfully added ‘Iesi.Collections 3.2.0.2001′ to ClassLibraryB.

Successfully added ‘NHibernate 3.2.0.2001′ to ClassLibraryB.

Successfully uninstalled ‘NHibernate 3.1.0.4000′.

Successfully uninstalled ‘Iesi.Collections 3.1.0.4000′.

NB: se si utilizza il file nuget.config per spostare tutti i package come riportato in questo precedente post questo tool non funziona. Comunque la feature che consente di avere un solo folder a livello di soluzione è in corso di implementazione (http://nuget.codeplex.com/wikipage?title=Package%20Updates%20Should%20Be%20Global).

SMAU Bologna e Community Tour 2011 – Windows Phone, HTML 5 e MVC

Giovedì 9 giugno 2011 nel contesto di SMAU Business alla Fiera di Bologna si terrà una nuova tappa del community tour organizzata da DotDotNet.

L’evento avrà come tema il presente ed il futuro del web con sessioni su Windows Phone 7, HTML 5 e MVC 3.

Mi è piacevolmente toccata la sessione su ASP.NET MVC 3 che considero un prodotto fondamentale per chiunque sviluppi su web applicazioni di una certa dimensione/durata.

Come al solito vi invito all’evento ed alla cena a seguire.

Agenda

Ora Sessione Speakers
13.45 – 14.00 Registrazione -
14.00 – 14.45 Keynote – Presente e futuro del Web Microsoft Italia
14.45 – 15.45 Introduzione alla piattaforma Windows Phone

Windows Phone 7 ha introdotto un nuovo modo per intendere il telefono e una nuova piattaforma basata su hardware consistente, una piattaforma di sviluppo basata su Silverlight e XNA e un Marketplace con nuove opportunità di business.
In questa sessione vedremo come sviluppare su Windows Phone, come promuovere le proprie applicazioni tramite il marketplace e inoltre vedremo le moltissime novità della versione “Mango” che verrà rilasciata in autunno.

Lorenzo Barbieri
Microsoft Developer Evangelist
15.45 – 16.00 Pausa -
16.00 – 17.00 Le novità di HTML5

HTML5 è il nuovo riferimento per lo sviluppo di siti e applicaizoni web based. In questa sessione vedremo come il nuovo standard può essere utilizzato per realizzare contenuti cross-browser e plugin-free ad alto impatto visuale.

Alessandro Scardova
Microsoft MVP, DotDotNet
17.00 – 18.00 ASP.NET MVC3

MVC favorisce la manutenzione delle applicazioni web tramite una architettura elegante ed una chiara ed esplicita separazione delle competenze, l’impiego dei più diffusi pattern di software engineering, il controllo completo dell’HTML generato e degli URL, la testabilità ed estendibilità. In questa sessione vedremo le novità principali della versione 3.

Stefano Benedetti
DotDotNet

Registrazione

Per registrarsi potete seguire questo link: http://dotdotnet.org/content/SmauBo2011.aspx

Spostare la cartella packages di NuGet

Nella configurazione di default NuGet crea una cartella chiamata packages nella root della soluzione dove vengono copiati tutti i package installati.

Questa configurazione non corrisponde però alla struttura delle mie soluzioni che normalmente è:

  • lib
  • src

dove lib contiene tutte le librerie da cui dipendono i progetti mentre i sorgenti della soluzione si trovano in src.

Fortunatamente esiste una feature non documentata che consente di specificare la posizione dei packages. E’ sufficiente aggiungere il file nuget.config allo stesso livello del file .sln e configurare il parametro repositoryPath.

Ad esempio per supportare la configurazione lib – src creare il file nuget.config in questo modo:

<settings>
	<repositoryPath>../lib/packages/</repositoryPath>
</settings>

NB: il path non può essere assoluto ma deve essere relativo rispetto al file .sln

In questo modo sia il package manager che la package console funzioneranno perfettamente utilizzando il nuovo percorso. Ovviamente i package già scaricati dovranno la prima volta essere spostati a mano nella nuova cartella.

Importante: lo stesso Phil Haack precisa che la feature non è supportata e non documentata perchè presenta ancora alcuni problemi e potrebbe essere rimossa/modificata nelle future release di NuGet.

Gestire le librerie con NuGet. Package reference e Package Console

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

add library package reference

Nell’esempio ho scelto log4net

Add library package reference window

Premendo “Install” viene scaricato ed installato il package. Il risultato è il seguente:

    1. Viene creata una cartella packages nella root della soluzione
    2. Viene aggiunta una reference alla DLL

log4net reference

  1. Viene creato il file Packages.config nella root dell’applicazione

Packages.config

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.

uninstall-log4net-from-library-package-reference

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.

update-nhibernate-from-library-package-reference

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:

get-package log4net

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:

get-package filter nhibernate

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.

install-package nhibernate

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:

nhibernate reference

Viene inoltre aggiornato il file packages.config e la cartella packages nella root della soluzione:

Packages.config nhibernate

packages folder nhibernate

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

elmah configsections

e configura i necessari httpmodules e httphandler:

elmah httpmodule 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.

update-nhibernate-from-package-console

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

NuGet semplifica le gestione delle librerie nei progetti .Net

Il processo di integrazione di una libreria di terze parti (in particolare open source) in un progetto .Net richiede normalmente i seguenti passi:

  • download della libreria
  • copia dei file nella cartella della soluzione
  • aggiunta delle Reference all’interno del/dei progetti che la utilizzano
  • eventuale modifica del file web.config e app.config

Inoltre eventuali aggiornamenti di versione o rimozione di una libreria devono essere effettuati manualmente dallo sviluppatore con la solita perdita di tempo e la possibilità di commettere errori.

NuGet è la risposta per automatizzare la gestione delle librerie di terze parti all’interno di Visual Studio.

Cos’è NuGet

logo-nuget

NuGet è una libreria open source indirizzata agli sviluppatori .Net.

NuGet semplifica l’integrazione di librerie di terze parti nei progetti Visual Studio scaricando tutte le librerie necessarie, aggiungendo le reference al progetto e modificando i file web.config o app.config.

Tramite NuGet è inoltre possibile modificare e rimuovere i pacchetti installati: il processo di disinstallazione provvede a cancellare i file, rimuovere le reference e ripulire i file app.config e web.config.

NuGet si basa su package che contengono le librerie necessarie ed un file di manifest  che guida NuGet nell’installazione e manutenzione del package. I package hanno estensione .nupkg e l’elenco dei package è aggiornato tramite un feed che viene letto da Visual Studio.

I file .nupkg sono dei normali file zip.

Requisiti di sistema

NuGet richiede uno dei seguenti sistemi operativi:

  • Windows 7
  • Windows Vista SP1
  • Windows Server 2008 o R2
  • Windows Server 2003 SP2
  • Windows XP SP3

NuGet si integra con Visual Studio 2010 e Visual Web Developer 2010.

Installare NuGet

NuGet può essere installato in due modi:

  • Scaricandolo da CodePlex
  • Utilizzando l’Extension Manager di Visual Studio 2010

Download di NuGet da CodePlex

Alla pagina http://nuget.codeplex.com/releases è possibile scaricare l’estensione per Visual Studio in formato vsix.

Installazione tramite extension manager di Visual Studio 2010

Il modo sicuramente più semplice per installare e mantenere aggiornato NuGet è quello di utilizzare l’extension manager.

L’extension manager si trova nel menù Tools:

Visual-Studio-Extension-Manager-menu

L’extension manager consente di gestire tutte le estensioni di Visual Studio 2010 e di installarne di nuove.

Visual-Studio-Extension-Manager

E’ sufficiente cercare NuGet e premere Download.

Al termine dell’installazione è necessario riavviare Visual Studio.

L’integrazione con Visual Studio

L’utilizzo di NuGet può avvenire in due modi:

  • dalla finestra “Add Library Package Reference
  • sfruttando PowerShell in una finestra dedicata

L’installazione aggiunge nel menù Tools una nuova voce “Library Package Manager”.

Library-Package-Manager-menu

Package Manager Settings

Selezionando la voce “Package Manager Settings” si accede direttamente a una nuova sezione di opzioni.

Package-Sources

In Package sources si gestisce l’elenco dei feed che contengono i package in formato .nupkg.

Di default è utilizzato il feed ufficiale Microsoft.

Package Manager Console

Selezionando la voce Package Manager Console si lancia un processo PowerShell ospitato in una finestra Visual Studio.

Package-manager-console

La prima tendina consente di selezionare il feed da cui scaricare l’elenco dei package disponibili.

La seconda tendina consente invece di selezionare il progetto della soluzione corrente su cui si vogliono gestire i package.

 

Nel prossimo post vedremo come gestire i package sia dalla Library Reference sia dalla Package Console.

 

Riferimenti