Librerie di classi .NET
Le librerie di classi rappresentano il concetto di libreria condivisa di .NET. Consentono di componentizzare funzionalità utili in moduli che possono essere usati da più applicazioni. Possono anche servire per caricare le funzionalità non necessarie o sconosciute all'avvio dell'applicazione. Le librerie di classi vengono descritte con il formato di file assembly .NET.
È possibile usare tre tipi di librerie di classi:
- Le librerie di classi specifiche della piattaforma possono accedere a tutte le API in una determinata piattaforma, ad esempio .NET Framework in Winsows, Xamarin iOS, ma possono essere usate solo da app e librerie destinate a tale piattaforma.
- Le librerie di classi portabili possono accedere a un sottoinsieme di API e possono essere usate da app e librerie destinate a più piattaforme.
- Le librerie di classi .NET Standard sono una fusione del concetto di libreria specifica della piattaforma e della libreria portabile in un unico modello che offre i vantaggi di entrambi i tipi di libreria.
Librerie di classi specifiche della piattaforma
Le librerie di classi specifiche della piattaforma sono associate a una singola piattaforma .NET, ad esempio.NET Framework in Windows, e possono pertanto dipendere in modo significativo dall'ambiente di esecuzione. Un ambiente di questo tipo espone un set noto di API. come .NET e le API del sistema operativo, nonché gestisce ed espone lo stato previsto, ad esempio, il Registro di sistema di Windows.
Gli sviluppatori che creano librerie specifiche della piattaforma possono sfruttare completamente la piattaforma sottostante. Le librerie saranno eseguite solo su quella piattaforma specifica. I controlli piattaforma o altre forme di codice condizionale, ad esempio il singolo codice di origine del modulo per più piattaforme, non risulteranno pertanto necessari.
Le librerie specifiche della piattaforma sono state il primo tipo di libreria di classi per .NET Framework. Nonostante lo sviluppo di altre implementazioni di .NET, le librerie specifiche della piattaforma sono rimaste il tipo di libreria principale.
Librerie di classi portabili
Le librerie portabili sono supportate su più implementazioni di .NET. Anche queste librerie possono dipendere da un tipo di ambiente di esecuzione che è tuttavia un ambiente sintetico, vale a dire un ambiente nato dall'intersezione di una serie di implementazioni di .NET concrete. Le API esposte e i presupposti della piattaforma sono pertanto un sottoinsieme di ciò che avrebbe a disposizione una libreria specifica della piattaforma.
Quando si crea una libreria portabile,è necessario scegliere una configurazione per la piattaforma. La configurazione della piattaforma costituisce l'insieme delle piattaforme da supportare, ad esempio, .NET Framework 4.5+, Windows Phone 8.0+. Più piattaforme si decide di supportare, minore sarà il numero di API e di presupposti della piattaforma possibili e più basso sarà il denominatore comune. All'inizio questa caratteristica può creare confusione, poiché si può pensare che aver più piattaforme sia spesso la soluzione migliore. In realtà si capirà poi che le API disponibili diminuiranno se si sceglie di supportare più piattaforme.
Molti sviluppatori di librerie hanno scelto di usare le librerie portabili anziché creare librerie specifiche della piattaforma partendo da un'unica origine e applicando direttive di compilazione condizionale. Esistono diversi approcci per accedere alle funzionalità specifiche della piattaforma in librerie portabili. La tecnica bait-and-switch è l'approccio più adottato.
Librerie di classi .NET Standard
Le librerie .NET Standard sostituiscono le librerie specifiche della piattaforma e le librerie portatili. Sono specifiche della piattaforma nel senso che espongono tutte le funzionalità della piattaforma sottostante, ad eccezione di piattaforme sintetiche o intersezioni di piattaforme. Sono portatili nel senso che funzionano su tutte le funzioni supportate.
.NET Standard espone una serie di contratti di libreria. Le implementazioni di .NET devono supportare ogni contratto completamente o non lo devono supportare affatto. Ogni implementazione supporta quindi un set di contratti di .NET Standard. È quindi essenziale che ogni libreria di classi .NET Standard sia supportata sulle piattaforme che supportano le dipendenze di contratto relative.
.NET Standard non espone l'intera funzionalità di .NET Framework, né questo è l’obiettivo. Tuttavia, le librerie espongono molte più API rispetto alle librerie di classi portabili.
Le implementazioni seguenti supportano le librerie .NET Standard:
- .NET Core
- .NET Framework
- Mono
- Piattaforma UWP (Universal Windows Platform)
Per altre informazioni, vedere .NET Standard.
Librerie di classi Mono
Mono supporta le librerie di classi, inclusi i tre tipi di libreria descritti in precedenza. Mono viene spesso considerato come un'implementazione multipiattaforma di .NET Framework. In parte perché le librerie .NET Framework specifiche della piattaforma possono essere eseguite in fase di esecuzione Mono senza modifiche o ricompilazione. Questa caratteristica esisteva prima che fossero create le librerie di classi portabili. Tali librerie risultano quindi una scelta obbligata per consentire la portabilità binaria tra .NET Framework e Mono, nonostante funzionasse solo in una direzione.