Alla scoperta di NuGet: repository privati
Scritto da
Giorgio Di Nardo
il
mercoledì 2 novembre 2011
Linguaggio:
•
Framework:
•
Livello: 100
Gestire feed personali
Nell'introduzione abbiamo visto che NuGet utilizza una serie di
feed come sorgenti per i pacchetti che è possibile installare nel
proprio progetto. Il feed principale - quello che viene
automaticamente configurato in fase di installazione dell'Extension
Manager in Visual Studio - è quello ufficiale che si trova sul sito
nuget.org. È possibile però aggiungere altre sorgenti modificando
le impostazioni di NuGet, potendo utilizzare sia percorsi locali e
di rete, sia feed su server remoti sui quali sia in esecuzione
IIS.
L'utilizzo di feed personali può risultare particolarmente utile
all'interno della propria organizzazione, sia nel caso in cui si
preferisca limitare e regolamentare l'utilizzo di librerie di terze
parti - non lasciando quindi accesso all'universo dei pacchetti
presenti sul feed ufficiale ma solo ad un insieme ristretto e
selezionato - sia nel caso in cui si vogliano distribuire e
riutilizzare con semplicità librerie proprietarie, sia infine per
"congelare" una particolare versione di una libreria per i propri
progetti.
Creare un feed in un percorso locale
Per creare un feed in un percorso locale è necessario in primo
luogo creare la cartella che fungerà da repository e copiarci
all'interno i pacchetti che si vorranno poi installare nei propri
progetti partendo da quella sorgente.
Creiamo ad esempio una cartella local feed e
copiamoci all'interno alcuni pacchetti (ossia i file .nupkg) che
abbiamo precedentemente scaricato dal feed ufficiale. Vedremo nel
prossimo articolo come effettuare la stessa operazione con
pacchetti proprietari.

È quindi necessario configurare il feed all'interno di Visual
Studio accedendo alle impostazioni di NuGet. Per farlo è possibile
sia utilizzare la voce Package Manager Settings
del menù Tools | Library Package
Manager sia il pulsante Setting che si
trova in basso a sinistra nella dialog box di NuGet.

Tra le varie opzioni selezioniamo la scheda Package
Manager | Package Source all'interno della quale sono
riportate tutte le fonti attualmente configurate. Come detto, di
base l'unica fonte disponibile è quella relativa al feed ufficiale
di NuGet.

Aggiungere un nuovo repository di pacchetti è semplicissimo.
Basta inserire una descrizione della sorgente nella casella di
testo Name e specificare l'indirizzo nella casella
Source, confermando quindi l'operazione con il
pulsante Add.

Il nuovo feed viene così aggiunto alla lista di quelli
utilizzabili da NuGet e dopo aver confermato le impostazioni con il
pulsante Ok è possibile verificarne il
funzionamento riaprendo la dialog box Manage NuGet
Packages. Sotto la scheda Online
troveremo l'elenco di tutte le fonti disponibili, compresa quella
appena aggiunta, e potremo quindi scegliere se effettuare una
ricerca completa o limitata ad una sola sorgente. Nel nostro caso
selezioniamo NuGet local package source per
ottenere l'elenco dei pacchetti che abbiamo in precedenza copiato
nella cartella local feed.

A questo punto possiamo operare esattamente con le stesse
modalità che abbiamo visto nell'articolo precedente con riferimento
al feed ufficiale.
Il feed locale può ovviamente essere utilizzato anche in
modalità Package Manager Console. In tal caso sarà
possibile selezionare la sorgente per mezzo della lista a cascata
Package source che si trova in alto a sinistra
nella console.

Creare un feed remoto
In alternativa alla creazione di un proprio feed personale su un
percorso fisico - locale, come nell'esempio precedente, o di rete -
è possibile creare un repository remoto su un server sul quale sia
in esecuzione IIS.
In tal caso è necessario realizzare una semplice Web Application
che, una volta pubblicata, fungerà da host per i nostri
pacchetti.
Apriamo quindi Visual Studio e selezioniamo la voce di menù
File | New | Project per aprire la dialog box di
creazione di un nuovo progetto. Sotto la scheda Installed
Templates selezioniamo Visual C# | Web e
quindi ASP.NET Empty Web Application.

Diamo un nome alla nostra applicazione e clicchiamo sul pulsante
Ok per creare il progetto.
Configurare l'applicazione in modo che sia in grado di
pubblicare un feed OData compatibile con quanto atteso da NuGet è
estremamente semplice grazie alla libreria
NuGet.Server che, come ovvio, è installabile nella
nostra applicazione tramite NuGet stesso.
Nel Solution Explorer clicchiamo quindi con il
tasto destro sul nodo References e selezioniamo
Manage NuGet Packages… dal menù contestuale per
aprire la dialog box (in alternativa è possibile usare la
Package Manager Console digitando il comando
Install-Package NuGet.Server).
Cerchiamo quindi il pacchetto NuGet.Server e
clicchiamo sul pulsante Install per aggiungerne il
riferimento all'interno del nostro progetto.

Come sappiamo NuGet aggiungerà automaticamente il riferimento ai
pacchetti da cui NuGet.Server dipende (come ad
esempio WebActivator e Ninject) e
provvederà a configurare tutte le librerie in modo che al termine
dell'installazione sarà già possibile compilare un'applicazione
perfettamente funzionante.
A partire dalla versione 1.5 di NuGet.Server,
che è quella attualmente distribuita tramite NuGet, all'interno del
file Web.config è presente la chiave
appSetting | packagesPath che consente di
specificare la cartella nella quale sono contenuti i pacchetti
(ossia come al solito i file .nupkg) che si vogliono pubblicare
tramite l'applicazione. In mancanza di indicazioni sarà usata la
cartella Packages che si trova nella root
dell'applicazione (non indicare una cartella è quindi equivalente
ad indicare la cartella ~/Packages). Nel caso si
voglia modificare tale impostazione è possibile assegnare alla
chiave packagesPath un valore sia in termini di
percorso assoluto che virtuale.

Benché sia possibile aggiungere dei pacchetti alla cartella
Packages direttamente a livello di progetto Visual
Studio (selezionando poi Include in Project per i
file copiati nella cartella e impostando tra le proprietà degli
stessi la Build Action a Content
per assicurarsi che i pacchetti vengano copiati nella cartella di
destinazione al momento della pubblicazione), in questo esempio
pubblicheremo un'applicazione vuota e aggiungeremo i pacchetti
successivamente.
Cominciamo quindi con il pubblicare l'applicazione cliccando con
il tasto destro sul file di progetto e selezionando
Publish… dal menù contestuale.

In questo esempio pubblicheremo l'applicazione in una cartella
locale a cui faremo puntare una Application di IIS. Selezioniamo
quindi File System come Publish
method e impostiamo una cartella locale come
Target Location. Diamo quindi avvio alla
pubblicazione cliccando sul pulsante Publish.

Al termine della pubblicazione apriamo la console di gestione di
IIS e dopo aver cliccato con il tasto destro su Default Web
Site selezioniamo la voce Aggiungi
applicazione… dal menù contestuale.

Assegniamo un Alias alla nostra applicazione e
facciamo puntare il Percorso fisico alla cartella
nella quale abbiamo effettuato la pubblicazione dell'applicazione
da Visual Studio. Verifichiamo inoltre che il Pool di
applicazioni faccia riferimento ad un pool che abbiamo
come versione del framework la 4.0.

Apriamo quindi la nostra applicazione all'interno del browser
per verificare che tutto funzioni correttamente. La pagina root
dell'applicazione ci conferma che il repository è attivo e ci
fornisce l'indirizzo da inserire nelle impostazioni di NuGet
all'interno di Visual Studio per utilizzare la nostra nuova
sorgente.

È inoltre presente un link attraverso il quale possiamo
visualizzare l'elenco dei pacchetti esposti dall'applicazione. Nel
nostro esempio, non avendo pubblicato alcun pacchetto tramite
Visual Studio, l'elenco sarà inizialmente vuoto, ma per aggiungere
nuovi pacchetti è sufficiente copiarli nella cartella senza
necessità di alcuna particolare configurazione.

Apriamo la cartella Packages presente nella
root dell'applicazione (o quella che abbiamo indicato nella chiave
packagesPath del Web.config) e
copiamoci all'interno gli stessi pacchetti che avevamo copiato in
precedenza nella cartella local feed.

Proviamo adesso a ricaricare la pagina con l'elenco dei
pacchetti e potremo vedere che automaticamente il feed è stato
aggiornato con l'aggiunta dei tre pacchetti che abbiamo appena
copiato.

Ora che abbiamo verificato il funzionamento del repository non
ci resta che configurare Visual Studio per poterlo usare con la
dialog box Manage NuGet Packages o con la
Package Manager Console. Apriamo nuovamente i
Package Manager Settings e, con la stessa
procedura utilizzata per la cartella locale, aggiungiamo una nuova
sorgente che dovrà puntare alla cartella nuget
all'interno della nostra applicazione.

La nuova sorgente è ora disponibile insieme alle altre già
configurate.

Tags: NuGet