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.CoreCLRpacchetto è 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.Librarymentre 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.