Quando dovremmo usare l'uno sull'altro?
La decisione è un compromesso tra compatibilità e accesso API.
Utilizzare una libreria .NET Standard quando si desidera aumentare il numero di app che saranno compatibili con la propria libreria e si è d'accordo con una riduzione dell'area della API .NET alla quale è possibile accedere alla propria libreria.
Utilizzare una libreria .NET Core quando si desidera aumentare la superficie dell'API .NET alla quale la libreria può accedere e si è d'accordo nel consentire che solo le app .NET Core siano compatibili con la propria libreria.
Ad esempio, una libreria destinata a .NET Standard 1.3 sarà compatibile con le app destinate a .NET Framework 4.6, .NET Core 1.0, Universal Windows Platform 10.0 e qualsiasi altra piattaforma che supporti .NET Standard 1.3. Tuttavia, la libreria non avrà accesso ad alcune parti dell'API .NET. Ad esempio, il Microsoft.NETCore.CoreCLR
pacchetto è compatibile con .NET Core ma non con .NET Standard.
Qual è la differenza tra Class Library (.NET Standard) e Class Library (.NET Core)?
La sezione Framework basati su pacchetti descrive la differenza.
Compatibilità: le librerie destinate a .NET Standard verranno eseguite su qualsiasi runtime conforme a .NET Standard, come .NET Core, .NET Framework, Mono / Xamarin. D'altro canto, le librerie destinate a .NET Core possono essere eseguite solo sul runtime .NET Core.
Superficie dell'API: le librerie .NET standard includono tutto, NETStandard.Library
mentre le librerie .NET Core sono dotate di tutto Microsoft.NETCore.App
. Quest'ultimo include circa 20 librerie aggiuntive, alcune delle quali possiamo aggiungere manualmente alla nostra libreria .NET Standard (come System.Threading.Thread
) e alcune non sono compatibili con .NET Standard (come Microsoft.NETCore.CoreCLR
).
Inoltre, le librerie .NET Core specificano un runtime e vengono fornite con un modello di applicazione. È importante, ad esempio, rendere eseguibili le librerie di classi di unit test.
Perché entrambi esistono?
Ignorando le librerie per un momento, la ragione per cui esiste .NET Standard è per la portabilità; definisce una serie di API che le piattaforme .NET accettano di implementare. Qualsiasi piattaforma che implementa uno standard .NET è compatibile con le librerie destinate a tale standard .NET. Una di queste piattaforme compatibili è .NET Core.
Tornando alle librerie, i modelli di libreria .NET Standard esistono per essere eseguiti su più runtime (a scapito della superficie dell'API). Al contrario, i modelli di libreria .NET Core esistono per accedere a più aree API (a spese della compatibilità) e per specificare una piattaforma sulla quale costruire un eseguibile.
Ecco una matrice interattiva che mostra quale .NET Standard supporta quali implementazioni .NET e quanta superficie API è disponibile.