Alla scoperta di NuGet: repository privati

Scritto da  Giorgio Di Nardo il mercoledì 2 novembre 2011
Linguaggio:    •  Framework: 3.5,4.0   •  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.

Cartella local feed

È 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.

Package Manager Settings

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.

Options1

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.

Aggiungi sorgente

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.

Local package source su GUI

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.

Local package source su 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.

New project

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.

NuGet.Server

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.

Web.config - packagesPath

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.

Menu Publish

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.

Publish Web

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.

IIS - Aggiungi applicazione

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.

IIS - Crea applicazione

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.

Remote Feed - Home

È 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.

Remote Feed - Packages1

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.

Cartella remote 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.

Remote Feed - Packages2

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.

Options2

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

Remote package source su GUI


Tags: NuGet

 
x