いつどちらを使用すればよいですか?
この決定は、互換性とAPIアクセスの間のトレードオフです。
ライブラリと互換性のあるアプリの数を増やしたい場合や、ライブラリがアクセスできる.NET APIの表面積を減らしても問題がない場合は、.NET標準ライブラリを使用します。
ライブラリがアクセスできる.NET APIの表面積を増やしたい場合は、.NET Coreライブラリを使用します。ライブラリとの互換性を.NET Coreアプリのみに許可してもかまいません。
たとえば、.NET Standard 1.3を対象とするライブラリは、.NET Framework 4.6、.NET Core 1.0、Universal Windows Platform 10.0、および.NET Standard 1.3をサポートするその他のプラットフォームを対象とするアプリと互換性があります。ただし、ライブラリは.NET APIの一部にアクセスできません。たとえば、 Microsoft.NETCore.CoreCLR
パッケージは.NET Coreと互換性がありますが、.NET Standardとは互換性がありません。
クラスライブラリ(.NET Standard)とクラスライブラリ(.NET Core)の違いは何ですか?
パッケージベースのフレームワークのセクションでは、違いについて説明しています。
互換性:.NET Standardをターゲットとするライブラリは、.NET Core、.NET Framework、Mono / Xamarinなどの.NET Standard準拠のランタイムで実行されます。一方、.NET Coreをターゲットとするライブラリは、.NET Coreランタイムでのみ実行できます。
API Surface Area:.NET Standardライブラリにはすべてが含まれてNETStandard.Library
いますが、.NET Coreライブラリにはすべてが含まれていMicrosoft.NETCore.App
ます。後者には約20の追加ライブラリが含まれており、そのうちの一部は.NET標準ライブラリ(などSystem.Threading.Thread
)に手動で追加でき、一部は.NET標準と互換性がありません(などMicrosoft.NETCore.CoreCLR
)。
また、.NET Coreライブラリはランタイムを指定し、アプリケーションモデルに付属しています。たとえば、単体テストのクラスライブラリを実行可能にすることは重要です。
なぜ両方が存在するのですか?
しばらくライブラリを無視して、.NET標準が存在する理由は移植性のためです。.NETプラットフォームが実装することに同意する一連のAPIを定義します。.NET標準を実装するプラットフォームは、その.NET標準を対象とするライブラリと互換性があります。これらの互換性のあるプラットフォームの1つは.NET Coreです。
ライブラリに戻ると、.NET標準ライブラリテンプレートは複数のランタイムで実行するために存在します(APIの表面積を犠牲にして)。逆に、.NET Coreライブラリテンプレートは、(互換性を犠牲にして)より多くのAPIサーフェスにアクセスし、実行可能ファイルを構築するプラットフォームを指定するために存在します。
これは、どの.NET標準がどの.NET実装をサポートするか、および使用可能なAPI表面積を示すインタラクティブなマトリックスです。