.NET Standard

.NET Standard は、すべての .NET ランタイムで使用できるようにすることを目的とした .NET API の正式な仕様です。 .NET Standard の背後にある意図は、.NET エコシステムの高度な統一性を確立することです。 ECMA 335 は引き続き .NET ランタイムの動作の統一性を確立しますが、.NET ライブラリの実装用の .NET 基底クラス ライブラリ (BCL) に同様の仕様はありません。

.NET Standard により、次の主なシナリオが可能になります。

  • ワークロードに関係なく、すべての .NET プラットフォーム用に統一された BCL API のセットを定義し、実装する。
  • 開発者が、この同じ API のセットを使用して、.NET ランタイム間で使用可能なポータブル ライブラリを生成できるようにする。
  • .NET API による共有ソースの条件付きコンパイルを削減するか、できればなくし、OS API に対してのみにする。

さまざまな .NET ランタイムが、.NET Standard の特定のバージョンを実装します。 各 .NET ランタイム バージョンは、それがサポートしている最高の .NET Standard バージョンをアドバタイズし、そのことは以前のバージョンもサポートしていることを意味します。 たとえば、.NET Framework 4.6 は .NET Standard 1.3 を実装しており、このことは、.NET Standard のバージョン 1.0 ~ 1.3 で定義されているすべての API を公開していることを意味します。 同様に、.NET Framework 4.6.1 は .NET Standard 1.5 を実装し、.NET Core 1.0 は .NET Standard 1.6 を実装しています。

.NET Platform のサポート

次の表は、.NET Standard のすべてのバージョンとサポートされているプラットフォームの一覧です。

.NET Standard 1.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0
.NET Core 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.0
.NET Framework (および Tooling 1.0) 4.5 4.5 4.5.1 4.6 4.6.1 4.6.2 vNext 4.6.1
.NET Framework (および Tooling 2.0) 4.5 4.5 4.5.1 4.6 4.6.1 4.6.1 4.6.1 4.6.1
Mono 4.6 4.6 4.6 4.6 4.6 4.6 4.6 vNext
Xamarin.iOS 10.0 10.0 10.0 10.0 10.0 10.0 10.0 vNext
Xamarin.Android 7.0 7.0 7.0 7.0 7.0 7.0 7.0 vNext
ユニバーサル Windows プラットフォーム 10.0 10.0 10.0 10.0 10.0 vNext vNext vNext
Windows 8.0 8.0 8.1
Windows Phone 8.1 8.1 8.1
Windows Phone Silverlight 8.0
  • 列は .NET Standard バージョンです。 各見出しセルは、そのバージョンの .NET Standard に追加された API に関するドキュメントのリンクになっています。
  • 行は、各 .NET プラットフォームです。
  • 各セルのバージョン番号は、その .NET Standard バージョンを実装する必要がある最小バージョンのプラットフォームです。

対象にすることができる最高バージョンの .NET Standard を確認するには、次の手順を実行します。

  1. 実行する .NET プラットフォームを示す行を探します。
  2. この行内で、右から左の方向に、バージョンを示す列を探します。
  3. 列見出しは、ターゲットがサポートしている .NET Standard バージョンです (そのバージョン以下の .NET Standard バージョンでもサポートされます)。
  4. 対象にするプラットフォームごとに、この手順を繰り返します。 複数のターゲット プラットフォームがある場合は、その中から低いバージョンを選択することをお勧めします。 たとえば、.NET Framework 4.5 と .NET Core 1.0 で実行する場合、使用できる .NET Standard の最高のバージョンは .NET Standard 1.1 です。

対象にする .NET Standard バージョン

.NET Standard バージョンを選択する場合、次のトレードオフを考慮する必要があります。

  • バージョンが高くなるほど、使用できる API が多くなる。
  • バージョンが低くなるほど、実装しているプラットフォームが多くなる。

一般的に、可能な限り最小バージョンの .NET Standard を対象にすることが推奨されます。 そのため、対象にする最高バージョンの .NET Standard を見つけたら、次の手順を実行します。

  1. 1 つ低いバージョンの .NET Standard を対象にしてプロジェクトをビルドします。
  2. プロジェクトのビルドが成功したら、手順 1 を繰り返します。 失敗した場合は、対象を次に高いバージョンに変更します。これが対象のバージョンです。

.NET Standard のバージョン管理規則

バージョン管理規則は主に 2 つあります。

  • 追加式。.NET Standard バージョンは論理的に同心円形です。高位のバージョンには、旧バージョンのすべての API が組み込まれています。 バージョン間に互換性に影響する変更はありません。
  • 不変。 出荷後、.NET Standard のバージョンは固定されます。 新しい API は、特定の .NET プラットフォーム (.NET Core など) でまず使用できるようになります。 .NET Standard の審査会が、新しい API を全ユーザーに使用できるようにした方がよいと判断すると、新しい .NET Standard バージョンに追加されます。

ポータブル クラス ライブラリとの比較

.NET Standard は、次世代のポータブル クラス ライブラリ (PCL) と考えることができます。 .NET Standard は、標準 BCL を精選し、結果として、.NET ランタイム間で高度な統一性を確立することによって、ポータブル ライブラリの作成の方法を向上しています。 .NET Standard を対象とするライブラリは、PCL つまり ".NET Standard ベースの PCL" です。 既存の PCL は、"プロファイルベースの PCL" です。

.NET Standard と PCL プロファイルは、似たような目的で作成されましたが、主な点が異なります。

類似点:

  • バイナリ コード共有に使用できる API を定義します。

相違点:

  • .NET Standard は精選された API のセットで、PCL プロファイルは、既存のプラットフォームの交差部分によって定義されています。
  • .NET Standard は線形的にバージョン管理されていますが、PCL プロファイルはそうではありません。
  • PCL プロファイルはマイクロソフトのプラットフォームを表し、.NET Standard はプラットフォームに依存しません。

指定

.NET Standard の仕様は、標準化された API のセットです。 この仕様は、.NET ランタイムの実装、具体的には Microsoft (.NET Framework、.NET Core、Mono を含む) と Unity によって管理されています。 GitHub 経由の新しい .NET Standard のバージョンの構築の一環として、公開フィードバック プロセスが使われています。

正式な成果物

正式な仕様は標準に含まれる API を定義する一連の .cs ファイルです。 各コンポーネントref ディレクトリ に.NET Standard API が定義されています。 ref 成果物は CoreFX リポジトリ内に存在しますが、それらは .NET Core 固有ではありません。

NETStandard.Library メタパッケージ (ソース) は、1 つ以上の .NET Standard Library のバージョンを定義する (一部) ライブラリのセットについて説明しています。

System.Runtime などの特定のコンポーネントは、次のように説明されています。

  • .NET Standard の一部 (そのスコープだけ)。
  • そのスコープの .NET Standard の複数のバージョン。

便利に読めるようにし、特定の開発者シナリオ (コンパイラを使用するなど) を可能にするために、派生成果物が提供されています。

パッケージ表現

.NET Standard 参照アセンブリの主要な配布手段は NuGet パッケージです。 実装は、各 .NET ランタイムに適切なさまざまな方法で配布されます。

NuGet パッケージは 1 つまたは複数のフレームワークを対象にしています。 .NET Standard パッケージは、".NET Standard" フレームワークを対象にしています。 netstandard compact TFM (netstandard1.4 など) を使用して、.NET Standard Framework を対象にすることができます。 複数のランタイムでの実行を意図したライブラリは、このフレームワークを対象とする必要があります。

NETStandard.Library メタパッケージは .NET Standard を定義する NuGet パッケージの完全なセットを参照しています。 netstandard を対象とする最も一般的な方法は、このメタパッケージを参照することです。 それは、.NET Standard を定義する約 40 の .NET ライブラリと関連する API について説明しており、それらにアクセスできるようにしています。 netstandard を対象とする追加のパッケージを参照して、追加の API にアクセスできます。

バージョン管理

仕様は 1 つだけではありませんが、段階的に拡張され、直線的にバージョン管理された API のセットです。 標準の最初のバージョンは、API のベースライン セットを構築しています。 それ以降のバージョンでは、API が追加され、以前のバージョンによって定義された API を継承しています。 標準から API を削除するために確立された取り決めはありません。

.NET Standard は、1 つの .NET ランタイムに固有ではなく、それらのランタイムのいずれかのバージョン管理スキームに一致することもありません。

いずれかのランタイム (.NET Framework、.NET Core、Mono など) に追加された API は、本質的に基本的であると考えられる場合に、仕様に追加される候補とみなされる可能性があります。 新しい.NET Standard のバージョン は、.NET ランタイムのリリースに基づいて作成されるので、.NET Standard PCL から新しい API を対象にすることができます。 バージョン管理メカニズムの詳細は、「.NET Core Versioning」(.NET Core のバージョン管理) で説明されています。

.NET Standard のバージョン管理は、使用する場合に重要です。 .NET Standard のバージョンが指定されている場合、それと同じか以下のバージョンを対象とするライブラリを使用できます。 次の方法では、.NET Standard の対象設定に固有の、.NET Standard PCL の使用のワークフローを説明します。

  • PCL に使用する .NET Standard のバージョンを選択します。
  • .NET Standard と同じかそれ以下のバージョンに依存するライブラリを使用します。
  • それより上の .NET Standard バージョンに依存するライブラリを見つけた場合は、それと同じバージョンを採用するか、そのライブラリを使用しないようにする必要があります。

PCL 互換性

.NET Standard は、PCL プロファイルのサブセットと互換性があります。 .NET Standard 1.0、1.1、1.2 はそれぞれ PCL プロファイルのセットと重複します。 この重複は 2 つの理由で作成されました。

  • .NET Standard ベースの PCL がプロファイルベースの PCL を参照できるようにする。
  • プロファイルベースの PCL を .NET Standard ベースの PCL としてパッケージできるようにする。

プロファイルベースの PCL の互換性は、Microsoft.NETCore.Portable.Compatibility NuGet パッケージで提供されています。 プロファイルベースの PCL を含む NuGet パッケージを参照するときに、この依存関係が必要です。

netstandard としてパッケージされたプロファイルベースの PCL は、通常パッケージされるプロファイルベースの PCL より使いやすくなります。 netstandard パッケージは、既存のユーザーと互換性があります。

標準 .NET と互換性がある PCL プロファイルのセットを確認できます。

PCL プロファイル .NET Standard PCL プラットフォーム
Profile7 1.1 .NET Framework 4.5、Windows 8
Profile31 1.0 Windows 8.1、Windows Phone Silverlight 8.1
Profile32 1.2 Windows 8.1、Windows Phone 8.1
Profile44 1.2 .NET Framework 4.5.1、Windows 8.1
Profile49 1.0 .NET Framework 4.5、Windows Phone Silverlight 8
Profile78 1.0 .NET Framework 4.5、Windows 8、Windows Phone Silverlight 8
Profile84 1.0 Windows Phone 8.1、Windows Phone Silverlight 8.1
Profile111 1.1 .NET Framework 4.5、Windows 8、Windows Phone 8.1
Profile151 1.2 .NET Framework 4.5.1、Windows 8.1、Windows Phone 8.1
Profile157 1.0 Windows 8.1、Windows Phone 8.1、Windows Phone Silverlight 8.1
Profile259 1.0 .NET Framework 4.5、Windows 8、Windows Phone 8.1、Windows Phone Silverlight 8

.NET Standard を対象とする

netstandard フレームワークと NETStandard.Library メタパッケージの組み合わせを使用して、.NET Standard Library をビルドできます。 .NET Core ツールを使用して .NET Standard を対象とする例を参照できます。

関連項目

.NET Standard のバージョン