Creare, distribuire e condividere extensions per Microsoft Visual Studio 2010
a cura di Alessandro Del Sole (requisiti: conoscenze di base su Visual Studio 2010)Introduzione
Fin dalla prima versione per .NET, Microsoft Visual Studio è un ambiente di sviluppo estendibile, nel senso che è possibile creare e installare componenti aggiuntivi che offrano funzionalità addizionali non incluse nell'ambiente stesso. In questo modo gli sviluppatori possono personalizzare l'IDE con funzionalità e strumenti di cui necessitano, producendo componenti che possono essere condivisi o distribuiti a livello commerciale.
Visual Studio 2010, pur mantenendo tale tradizione, è un ambiente rivoluzionario poiché fa uso di Windows Presentation Foundation per molti aspetti che ne caratterizzano l'architettura e questo cambia anche il modo con cui può essere esteso. Con l'eccezione di Addin e Code Snippet, che si "impacchettano" e distribuiscono col vecchio formato di file .vsi (di cui parlammo in un vecchio articolo), con Visual Studio 2010 viene introdotto il formato .vsix che serve per installare le cosiddette extensions, ossia componenti aggiuntivi quali template, tool window, estensioni per l'editor di codice e controlli utente da installare nella Toolbox. Cambia anche la strumentazione di Visual Studio, che si arricchisce con l'Extension Manager, un tool integrato che ci permette di gestire le estensioni installate in locale e di scaricarne di nuove da un apposito portale di Microsoft chiamato Visual Studio Gallery.In questo articolo vedremo come estendere Visual Studio 2010 con nuove estensioni, sia scaricandole dalla Visual Studio Gallery che dall'ambiente di sviluppo, nonché come sia possibile creare e distribuire le proprie estensioni.
Questo articolo è stato scritto con riferimento alla Release Candidate di Visual Studio 2010 (che è necessario scaricare prima di proseguire nella lettura), ma nel momento in cui l'ambiente sarà rilasciato in versione definitiva, i concetti saranno ugualmente applicabili.
Il codice sorgente dell'esempio illustrato nell'articolo è disponibile in area Download di VB T&T.Scaricare estensioni dalla Visual Studio Gallery
Microsoft offre un interessante portale chiamato Visual Studio Gallery, un repository di estensioni per Visual Studio 2010 e componenti aggiuntivi anche per le precedenti versioni fino alla 2002. Da questo sito è possibile scaricare estensioni, ma è anche possibile caricare le proprie, sia in forma free e free trial, che a pagamento. Nella figura seguente vedete un particolare di come si presenta il sito:
(cliccate per la figura completa)Per impostazione predefinita il portale elenca tutti i componenti aggiuntivi, gratuiti e a pagamento, per tutte le edizioni dell'IDE. Sulla sinistra trovate l'elenco delle versioni supportate e potete filtrare la ricerca in base all'edizione di Visual Studio e in base al costo (gratuito o a pagamento) del componente. Le estensioni si dividono in tre macro-categorie: strumenti (tools), controlli (controls) e modelli (templates). A esempio, la seguente figura mostra tutte le estensioni free, di tipo Template, per Visual Studio 2010:
(cliccate per la figura completa)Per capire come funzioni la Gallery, facciamo clic sull'estensione chiamata WCF REST Service Template 40(VB), un modello per creare servizi Windows Communication Foundation abilitati all'approccio REST, con Visual Basic 2010. Ci verrà mostrata una finestra di riepilogo, dalla quale sarà possibile scaricare l'estensione:
(cliccate per la figura completa)Facendo clic su Download si scarica un file con estensione .vsix, il cui avvio installerà il modello. Ci verrà richiesto di accettare l'eventuale contratto di licenza e di specificare le edizioni di Visual Studio 2010 destinatarie dell'estensione, come si evince dalla seguente figura riepilogativa:
![]()
Possiamo verificare la corretta installazione del modello semplicemente avviando Visual Studio 2010. Il nuovo modello di progetto è effettivamente disponibile nell'elenco che abbiamo a disposizione nella finestra di creazione di un nuovo progetto:
![]()
Effettivamente, visitare la Visual Studio Gallery può risultare macchinoso, se non dobbiamo cercare componenti anche per le precedenti edizioni dell'IDE. Fortunatamente, è possibile ricercare estensioni per Visual Studio 2010 direttamente dall'interno dell'IDE come vedremo tra breve.
Prima, però, è necessario qualche cenno sui file .vsix.Cenni sulla struttura dei file .vsix
I file .vsix sono strutturati secondo lo standard Open Packaging Convention, per il quale, fra l'altro, .NET Framework espone delle apposite API fin dalla versione 3.0. Si tratta, in parole molto povere, di archivi Zip che hanno al loro interno un testo Xml descrittivo del contenuto, oltre ovviamente ai file da installare.
Se provate ad aprire il file .vsix appena scaricato con un programma di utilità come WinZip o WinRAR, scoprirete che contiene:
- un file chiamato [Content_Types].xml, comune a tutti gli archivi compressi secondo la citata convenzione, che contiene informazioni sui tipi MIME dei file nell'archivio;
- un file con estensione .png, che costituisce l'immagine di anteprima da utilizzare nella Gallery e all'interno di Visual Studio 2010, come vedremo tra breve;
- una cartella chiamata Package, in cui sono memorizzate informazioni ad uso dell'estensione come ad esempio l'eventuale firma digitale;
- una cartella chiamata _rels contenente informazioni a uso del runtime per l'installazione dell'estensione;
- una o più cartelle che contengono le estensioni da installare, se si tratta di template
- nel nostro caso, c'è una cartella chiamata Projects che contiene un ulteriore archivio zip costituente il project template da installare; nel caso in cui invece si tratti di altro genere di estensione, saranno presenti i relativi file;- un file chiamato extension.vsixmanifest: questo file è il manifesto dell'installazione ed è fondamentale perché contiene tutte le informazioni necessarie alla corretta installazione e riconoscimento, da parte di Visual Studio, dell'estensione da installare; ha struttura Xml, ma, fortunatamente, come vedremo nei prossimi paragrafi, non dovremo scriverlo a mano, potendo sfruttare un apposito designer di Visual Studio.
Ecco il contenuto del file extension.vsixmanifest relativo all'estensione appena scaricata:
<?xml version="1.0" encoding="utf-8"?> <Vsix Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010"> <Identifier Id="WcfRestServiceTemplate40.vb"> <Name>WCF REST Service Template 40(VB)</Name> <Author>Microsoft</Author> <Version>0.1</Version> <Description>A WCF REST service template for VB.</Description> <Locale>1033</Locale> <Icon>WcfRestService.png</Icon> <PreviewImage>WcfRestService.png</PreviewImage> <SupportedProducts> <VisualStudio Version="10.0"> <Edition>Pro</Edition> <Edition>VBExpress</Edition> </VisualStudio> </SupportedProducts> <SupportedFrameworkRuntimeEdition MinVersion="4.0" MaxVersion="4.0" /> </Identifier> <References /> <Content> <ProjectTemplate>Project</ProjectTemplate> </Content> </Vsix>Se ne analizziamo il contenuto, possiamo iniziare a capire, dai nomi per lo più autoesplicativi dei tag, quali sono le informazioni necessarie per distribuire l'estensione: a parte Name, Author, Version, Description, l'elemento Locale consente di identificare la cultura di destinazione, mentre Icon e PreviewImage permettono di specificare, rispettivamente, l'immagine da usare come icona e quella da usare come anteprima all'interno di Visual Studio; SupportedProducts definisce quali sono le edizioni di Visual Studio supportate, mentre SupportedFrameworkRuntimeEdition specifica le versioni minima e massima di .NET supportate; Content rappresenta i contenuti da installare, quindi è possibile specificarne più di uno, mentre References (qui vuoto) verrà descritto in seguito.
E' importante sapere che il formato .vsix è riconosciuto dalla Visual Studio Gallery e ci permette di condividere le nostre estensioni su Internet (cosa che il vecchio formato .vsi non consente).
Dopo aver fatto questa breve introduzione al formato .vsix, possiamo passare a vedere, dapprima, come scaricare e installare estensioni direttamente da Visual Studio e, in seguito, a vedere come creare e distribuire le nostre estensioni personalizzate.Utilizzare lo strumento Extension Manager
Visual Studio 2010 offre uno strumento chiamato Extension Manager, che consente di gestire le estensioni. Esso permette di scaricare estensioni dalla Visual Studio Gallery, ma anche di elencare, rimuovere e disabilitare le estensioni correntemente installate sul proprio sistema. Si attiva selezionando il comando Extension Manager del menu Tools. La seguente figura mostra come si presenta:
(cliccate per la figura completa)Per default verrà visualizzato l'elenco delle estensioni installate (elemento Installed Extensions), ma, se facciamo clic su Online Gallery, sarà possibile sfogliare le estensioni disponibili nella Visual Studio Gallery direttamente dall'IDE. Osservate come sia possibile (dal lato sinistro) filtrare la navigazione a seconda della tipologia di estensione (All, Controls, Templates e Tools), mentre sul lato destro della finestra sono mostrate (se fornite dal produttore) alcune informazioni di dettaglio e l'immagine di anteprima.
Per scaricare una nuova estensione, non dobbiamo far altro che selezionare e scaricare quella desiderata. Nell'esempio corrente viene scaricata l'estensione VSIX Explorer, che ci permette di esaminare il contenuto dei file .vsix. Una volta scaricata ed installata, sarà necessario riavviare l'IDE (operazione questa che può essere eseguita direttamente dal tool).
Se riapriamo l'Extension Manager, vediamo che è possibile disabilitare o rimuovere l'estensione appena installata:
(cliccate per la figura completa)Per completezza viene mostrata una figura che rappresenta l'estensione scaricata durante la sua esecuzione:
![]()
Dopo aver visto come scaricare e gestire le estensioni da Visual Studio 2010, vediamo ora di capire come sviluppare estensioni personalizzate.
Creare estensioni per Visual Studio 2010
Per poter sviluppare estensioni per Visual Studio 2010 (ad eccezione dei project/item template, che si creano attraverso l'apposito comando del menu File), è necessario dotarsi del Visual Studio 2010 SDK.
Una volta installato questo, si hanno a disposizione, oltre a una serie di strumenti e documenti, nuovi modelli di progetto dedicati all'estendibilità dell'ambiente (incluso l'editor di codice).A esempio, supponiamo di voler creare un controllo utente WPF da voler distribuire e rendere disponibile nella Toolbox invece che lasciare all'utente il compito di farlo manualmente: selezioniamo File|New|Project, espandiamo la cartella Visual Basic (ovviamente c'è anche per C#), quindi il nodo Extensibility; dall'elenco di template disponibili, selezioniamo quello chiamato WPF ToolBox Control:
(cliccate per la figura completa)Dopo alcuni secondi il nuovo progetto è pronto. Si presenta in realtà come un normale progetto per user control in WPF:
(cliccate per la figura completa)Se volessimo, potremmo modificare il codice e implementare un controllo utente che abbia più senso, ma per il nostro esempio dimostrativo è sufficiente quello proposto. Ora aggiungiamo al progetto un semplice file di testo e chiamiamolo License.txt, nel quale digitiamo qualche riga di testo a piacere in modo da poter simulare un contratto di licenza da accettare per poter installare l'estensione. In Solution Explorer possiamo notare la presenza di un file chiamato ProvideToolboxControlAttribute.vb, che è di supporto all'estendibilità, e di un file chiamato source.extension.vsixmanifest. Quest'ultimo è proprio il file di manifesto a struttura Xml che abbiamo descritto in precedenza, che contiene le informazioni sul pacchetto di installazione da creare per distribuire l'estensione e che, fortunatamente, può essere editato direttamente dall'IDE. Facciamo doppio clic su questo file e osserviamo Visual Studio 2010:
(cliccate per la figura completa)La maggior parte delle informazioni richieste si spiega da sola, in particolare possiamo inserire l'autore, il numero di versione dell'extension, la descrizione, un contratto di licenza (in formato testo o Rtf), un'icona e un'immagine d'anteprima che verranno utilizzate dal tool Extension Manager. Inoltre è possibile specificare riferimenti ad altre estensioni (griglia References) ed eventuali ulteriori contenuti da distribuire (griglia Content). Molto interessante è la possibilità di specificare le edizioni di Visual Studio 2010 supportate dall'extension: cliccando il pulsante Select Editions si accede alla seguente finestra, dove è possibile indicare le edizioni adatte:
![]()
A questo punto compiliamo il progetto. Se premiamo F5, verrà avviata una seconda istanza di Visual Studio 2010 (denominata Experimental Instance) per il debug, ma non è questo che ci interessa, volendo invece vedere come avviene la distribuzione e la successiva installazione. All'interno della cartella Bin\Debug (o Bin\Release) del progetto troveremo un file con estensione .vsix, che prende il nome dal progetto. Questo è esattamente il file che dovremo distribuire e che installerà il nostro componente. Facciamo doppio clic sul file. A questo punto comparirà una finestra, in cui ci verrà chiesto di accettare il contratto di licenza, oltre a visualizzare informazioni sul componente e permetterci di selezionare le edizioni di Visual Studio 2010 tra quelle presenti sulla macchina:
![]()
Facciamo clic su Install. Al successivo riavvio di Visual Studio 2010 troveremo il nostro controllo utente WPF nella Toolbox:
![]()
Nella figura precedente il controllo si vede due volte, sia perché disponibile nella nuova scheda appositamente creata, sia perché disponibile nella scheda che riepiloga tutti i controlli WPF. Per gestire la nostra estensione, ma anche tutte quelle disponibili sul sistema, richiamiamo l'Extension Manager che stavolta si presenta come in figura:
(cliccate per la figura completa)Nell'esempio si vede il nostro controllo utente che può essere disabilitato o disinstallato e per il quale vengono mostrate le informazioni sul produttore e un'immagine d'anteprima.
Pubblicare e condividere estensioni sulla Visual Studio Gallery
Dopo aver creato le proprie estensioni è molto probabile che si voglia renderle disponibili ad altri sviluppatori, sia che lo si faccia come attività commerciale, che come condivisione gratuita di strumenti. La Visual Studio Gallery ci permette di pubblicare le nostre estensioni e di renderle disponibili per il download anche tramite Visual Studio 2010. Dopo esserci loggati con il nostro Windows Live ID, facciamo clic su Upload. A questo punto ci verranno richieste alcune informazioni, la prima delle quali è il tipo di contenuto che vogliamo distribuire:
(cliccate per la figura completa)Selezioniamo Control e andiamo avanti. Dovremo poi specificare se caricare l'intera estensione oppure se fornire solamente un link ad un sito esterno dal quale eseguire l'effettivo download. Decidiamo di puntare a un sito esterno (nella realtà potreste preferire ospitare il file su un vostro server), fornendo il percorso completo del file .vsix:
(cliccate per la figura completa)Per motivi puramente dimostrativi, nella figura precedente è indicato il link a VB T&T, ma è necessario specificare il link completo del file.
Andando avanti, si potrà completare il lavoro, compilando gli ultimi campi richiesti che riguardano le informazioni di pubblicazione (notate, fra l'altro, la possibilità di specificare la categoria di costo):
(cliccate per la figura completa)In fondo alla medesima pagina Web troverete anche la possibilità di fornire una descrizione completa e il pulsante per proseguire con l'invio/pubblicazione dell'estensione, che sarà successivamente visibile anche all'interno dell'Extension Manager di Visual Studio 2010.
Conclusioni
Estendere l'ambiente di sviluppo significa ampliare non solo la propria "cassetta degli attrezzi", ma anche le proprie possibilità di mercato nel settore dei componenti aggiuntivi, così come le possibilità di condividere le proprie estensioni con altri sviluppatori.
Questo articolo è solamente un sommario delle attività necessarie per creare e distribuire estensioni, ma c'è molto da sapere sull'estendibilità di Visual Studio 2010. Nel VSX Developer Center troverete tutta la documentazione necessaria.Per eventuali informazioni potete visitare il mio blog o contattarmi al mio indirizzo di posta elettronica.