Sono passati ormai 14 anni dall'uscita del .NET Framework e da allora la strada compiuta è stata molta. Il framework si è evoluto, includendo nuove librerie e adattandosi all'evoluzioni dell'informatica, mentre i linguaggi per svilupparci, C# e VB, sono migliorati includendo aspetti della programmazione funzionale e della parallelizzazione. Il .NET Framework però, oltre che essere cambiato nelle versioni, ormai 4.5.1, è stato clonato e in parte riscritto per essere performante e adattato ad altre esigenze. Sebbene quindi il nostro know how e i linguaggi sono interamente utilizzabili, ci ritroviamo ad utilizzare framework specifici, come Silverlight se siamo sul plugin web, Windows Phone runtime se siamo su Windows Phone, WinRT se siamo su Windows 8. Purtroppo questi runtime non sono allineati tra loro e presentano alcune differenze a seconda del fork dal quale sono partite, che spaziano dal supporto allo XAML fino ad alcuni dettagli della BCL. Runtime diversi significano anche assembly diversi, e questo significa che il compilatore non ci può permettere di scrivere codice una volta sola, ma siamo obbligati a duplicare o linkare file su più progetti, a seconda della piattaforma che stiamo usando.

A tutto questo c'è però fortunatamente rimedio, grazie alle Portable Class Library (PCL), introdotte dapprima come addin ed ora invece incluse direttamente con Visual Studio 2013. Con esse possiamo scrivere librerie facilmente riutilizzabili su più piattaforme, senza doverle ricompilare. In questo articolo vediamo come realizzare un progetto PCL e cosa dobbiamo considerare se utilizziamo questa nuova tipologia.

Il primo progetto PCL e il suo utilizzo

Per creare una progetto PCL dobbiamo utilizzare come sempre Visual Studio 2013. Partendo dal linguaggio, indipendentemente dalla piattaforma, ci ritroviamo sempre la tipologia Portable Class Library, come nella figura.

Premendo OK ci viene mostrata una maschera per la selezione delle piattaforme che vogliamo supportare. Questa scelta è molto importante e, come vedremo dopo, determina quali classi della BCL e quali membri potremo utilizzare.

Se disponiamo anche di Xamarin, di cui troviamo un articolo introduttivo qua, troviamo la possibilità di supportare anche Android e iOS. Per il momento ci soffermiamo su quelle supportate da Microsoft che, come possiamo vedere dall'immagine, sono il .NET Framework per Windows, le Windows Store app, Silverlight e Windows Phone. Quest'ultimo è disponibile anche in versione 7 e 7.5 se stiamo usando Visual Studio 2012 con i tool dedicati installati. Per ogni piattaforma possiamo poi scegliere quale versione supportare. Poiché il framework di una versione successiva supporta sempre le API di quelle precedenti, più scendiamo di versione e più siamo compatibili con la maggior parte dei progetti. In alcuni casi, poi, come per esempio le Windows Store app in versione 8 e 8.1, non vi è alcuna differenza in termini di API che abbiamo disposizione, perciò Visual Studio ci suggerisce di selezionare la versione minima. Infine, possiamo facoltativamente premere il pulsante Install additional frameworks e ottenere una lista su come installare anche altri target framework, come il .NET Framework 3.5 o l'Xbox 360, anche se raramente dovremo fare ciò se il nostro obbiettivo sono le attuali tecnologie utilizzate.

Premendo nuovamente OK otteniamo un normale progetto dove inserire tutto ciò che ci serve, che infine produrrà una libreria. Il fatto che ciò che possiamo produrre è una libreria, sta indicare che non possiamo produrre un'applicazione che vada su più piattaforme, ma che possiamo scrivere classi che potremo utilizzare in ognuna delle piattaforme. Questo ci obbliga quindi a scrivere codice in un certo modo, pensando attentamente all'architettura, come vedremo più avanti.

Tornando al progetto, dall'immagine seguente possiamo vedere che i riferimenti sono un generico .NET Portable subset.

Questo significa che non possiamo referenziare assembly a piacimento, ma possiamo utilizzare solo un subset disponibile su tutte le piattaforme. A questo punto modifichiamo il progetto inserendo una classe di prova e procediamo alla creazione di un progetto di qualsiasi tipo, sia esso console, WPF, WP8 o Silverlight. Possiamo notare che il progetto PCL è referenziabile come una normale class library sviluppata per una specifica piattaforma.

4 pagine in totale: 1 2 3 4
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

Portable Class Library: sviluppare librerie multipiattaforma in C# e VB 1010 1
| Condividi su: Twitter, Facebook, LinkedIn, Google+

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti