.NET Standard.NET Standard

.NET Standard は、すべての .NET 実装で使用できるようにすることを目的とした .NET API の正式な仕様です。The .NET Standard is a formal specification of .NET APIs that are intended to be available on all .NET implementations. .NET Standard の背後にある意図は、.NET エコシステムの高度な統一性を確立することです。The motivation behind the .NET Standard is establishing greater uniformity in the .NET ecosystem. ECMA 335 は引き続き .NET 実装の動作の統一性を確立しますが、.NET ライブラリの実装用の .NET 基底クラス ライブラリ (BCL) に同様の仕様はありません。ECMA 335 continues to establish uniformity for .NET implementation behavior, but there's no similar spec for the .NET Base Class Libraries (BCL) for .NET library implementations.

.NET Standard により、次の主なシナリオが可能になります。The .NET Standard enables the following key scenarios:

  • ワークロードに関係なく、すべての .NET 実装用に統一された BCL API のセットを定義し、実装する。Defines uniform set of BCL APIs for all .NET implementations to implement, independent of workload.
  • 開発者が、この同じ API のセットを使用して、.NET 実装間で使用可能なポータブル ライブラリを生成できるようにする。Enables developers to produce portable libraries that are usable across .NET implementations, using this same set of APIs.
  • .NET API による共有ソースの条件付きコンパイルを削減あるいはなくして、OS API に対してのみにする。Reduces or even eliminates conditional compilation of shared source due to .NET APIs, only for OS APIs.

さまざまな .NET 実装が、.NET Standard の特定のバージョンを対象とします。The various .NET implementations target specific versions of .NET Standard. 各 .NET 実装バージョンは、それがサポートしている最高の .NET Standard バージョンをアドバタイズし、そのことは以前のバージョンもサポートしていることを意味します。Each .NET implementation version advertises the highest .NET Standard version it supports, a statement that means it also supports previous versions. たとえば、.NET Framework 4.6 は .NET Standard 1.3 を実装しており、このことは、.NET Standard のバージョン 1.0 ~ 1.3 で定義されているすべての API を公開していることを意味します。For example, the .NET Framework 4.6 implements .NET Standard 1.3, which means that it exposes all APIs defined in .NET Standard versions 1.0 through 1.3. 同様に、.NET Framework 4.6.1 は .NET Standard 1.4 を実装し、.NET Core 1.0 は .NET Standard 1.6 を実装しています。Similarly, the .NET Framework 4.6.1 implements .NET Standard 1.4, while .NET Core 1.0 implements .NET Standard 1.6.

.NET 実装のサポート.NET implementation support

次の表は、.NET Standard の各バージョンをサポートするプラットフォームの最小バージョンを一覧表示します。The following table lists the minimum platform versions that support each .NET Standard version.

.NET Standard.NET Standard 1.01.0 1.11.1 1.21.2 1.31.3 1.41.4 1.51.5 1.61.6 2.02.0
.NET Core.NET Core 11.0 11.0 11.0 11.0 11.0 11.0 11.0 2.02.0
.NET Framework 1.NET Framework 1 4.54.5 4.54.5 4.5.14.5.1 4.64.6 4.6.14.6.1 4.6.14.6.1 4.6.14.6.1 4.6.14.6.1
MonoMono 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 5.45.4
Xamarin.iOSXamarin.iOS 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.1410.14
Xamarin.MacXamarin.Mac 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.83.8
Xamarin.AndroidXamarin.Android 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 8.08.0
ユニバーサル Windows プラットフォームUniversal Windows Platform 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.0.1629910.0.16299 10.0.1629910.0.16299 10.0.1629910.0.16299
WindowsWindows 8.08.0 8.08.0 8.18.1
Windows PhoneWindows Phone 8.18.1 8.18.1 8.18.1
Windows Phone SilverlightWindows Phone Silverlight 8.08.0

1 .NET Framework のバージョン リストは、.NET Core SDK 2.0 以降のバージョンのツールに適用されます。以前のバージョンでは、.NET Standard 1.5 以降で別のマッピングが使用されます。Visual Studio 2017 にアップグレードできない場合は、Visual Studio 2015 用の .NET Core のツールをダウンロードできます。1 The versions listed for .NET Framework apply to .NET Core SDK 2.0 and later versions of the tooling. Older versions used a different mapping for .NET Standard 1.5 and higher. You can download tooling for .NET Core tools for Visual Studio 2015 if you cannot upgrade to Visual Studio 2017.

  • 列は .NET Standard バージョンです。The columns represent .NET Standard versions. 各見出しセルは、そのバージョンの .NET Standard に追加された API に関するドキュメントのリンクになっています。Each header cell is a link to a document that shows which APIs got added in that version of .NET Standard.
  • 行は、各 .NET 実装です。The rows represent the different .NET implementations.
  • 各セルのバージョン番号は、その .NET Standard バージョンをターゲットにするために必要な最小バージョンの実装です。The version number in each cell indicates the minimum version of the implementation you'll need in order to target that .NET Standard version.
  • 対話型のテーブルについては、「.NET Standard バージョン」を参照してください。For an interactive table, see .NET Standard versions.

対象にすることができる最高バージョンの .NET Standard を確認するには、次の手順を実行します。To find the highest version of .NET Standard that you can target, do the following steps:

  1. 実行する .NET 実装を示す行を探します。Find the row that indicates the .NET implementation you want to run on.
  2. この行内で、右から左の方向に、バージョンを示す列を探します。Find the column in that row that indicates your version starting from right to left.
  3. 列見出しは、ターゲットがサポートしている .NET Standard バージョンです (そのバージョン以下の .NET Standard バージョンでもサポートされます)。The column header indicates the .NET Standard version that your target supports (and any lower .NET Standard versions will also support it).
  4. 対象にするプラットフォームごとに、この手順を繰り返します。Repeat this process for each platform you want to target. 複数のターゲット プラットフォームがある場合は、その中から低いバージョンを選択することをお勧めします。If you have more than one target platform, you should pick the smaller version among them. たとえば、.NET Framework 4.5 と .NET Core 1.0 で実行する場合、使用できる .NET Standard の最高のバージョンは .NET Standard 1.1 です。For example, if you want to run on .NET Framework 4.5 and .NET Core 1.0, the highest .NET Standard version you can use is .NET Standard 1.1.

対象にする .NET Standard バージョンWhich .NET Standard version to target

.NET Standard バージョンを選択する場合、次のトレードオフを考慮する必要があります。When choosing a .NET Standard version, you should consider this trade-off:

  • バージョンが高くなるほど、使用できる API が多くなる。The higher the version, the more APIs are available to you.
  • バージョンが低くなるほど、実装しているプラットフォームが多くなる。The lower the version, the more platforms implement it.

一般的に、可能な限り最小バージョンの .NET Standard を対象にすることが推奨されます。In general, we recommend you to target the lowest version of .NET Standard possible. そのため、対象にする最高バージョンの .NET Standard を見つけたら、次の手順を実行します。So, after you find the highest .NET Standard version you can target, follow these steps:

  1. 1 つ低いバージョンの .NET Standard を対象にしてプロジェクトをビルドします。Target the next lower version of .NET Standard and build your project.
  2. プロジェクトのビルドが成功したら、手順 1 を繰り返します。If your project builds successfully, repeat step 1. 失敗した場合は、対象を次に高いバージョンに変更します。これが対象のバージョンです。Otherwise, retarget to the next higher version and that's the version you should use.

ただし、下位バージョンの .NET Standard を対象にしている場合、さまざまな依存関係のサポートが導入されます。However, targeting lower .NET Standard versions introduces a number of support dependencies. お使いのプロジェクトが .NET Standard 1.x を対象としている場合、.NET Standard 2.0 "" 対象にすることをお勧めします。If your project targets .NET Standard 1.x, we recommend that you also target .NET Standard 2.0. これにより、.NET Standard 2.0 と互換性のあるフレームワーク上で実行されるライブラリのユーザーでは、依存関係グラフが簡素化され、ダウンロードが必要になるパッケージ数が減少します。This simplifies the dependency graph for users of your library that run on .NET Standard 2.0 compatible frameworks, and it reduces the number of packages they need to download.

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

バージョン管理規則は主に 2 つあります。There are two primary versioning rules:

  • 追加式。 .NET Standard バージョンは論理的に同心円形です。高位のバージョンには、旧バージョンのすべての API が組み込まれています。Additive: .NET Standard versions are logically concentric circles: higher versions incorporate all APIs from previous versions. バージョン間に互換性に影響する変更はありません。There are no breaking changes between versions.
  • 不変: 出荷後、.NET Standard のバージョンは固定されます。Immutable: Once shipped, .NET Standard versions are frozen. 新しい API は、特定の .NET 実装 (.NET Core など) でまず使用できるようになります。New APIs first become available in specific .NET implementations, such as .NET Core. .NET Standard の審査会が、新しい API をすべての .NET 実装で使用できるようにした方がよいと判断すると、新しい .NET Standard バージョンに追加されます。If the .NET Standard review board believes the new APIs should be available for all .NET implementations, they're added in a new .NET Standard version.

仕様Specification

.NET Standard の仕様は、標準化された API のセットです。The .NET Standard specification is a standardized set of APIs. この仕様は、.NET 実装、具体的には Microsoft (.NET Framework、.NET Core、Mono を含む) と Unity によって管理されています。The specification is maintained by .NET implementors, specifically Microsoft (includes .NET Framework, .NET Core, and Mono) and Unity. GitHub 経由の新しい .NET Standard のバージョンの構築の一環として、公開フィードバック プロセスが使われています。A public feedback process is used as part of establishing new .NET Standard versions through GitHub.

正式な成果物Official artifacts

正式な仕様は標準に含まれる API を定義する一連の .cs ファイルです。The official specification is a set of .cs files that define the APIs that are part of the standard. dotnet/standard リポジトリref ディレクトリに.NET Standard API が定義されています。The ref directory in the dotnet/standard repository defines the .NET Standard APIs.

NETStandard.Library メタパッケージ (ソース) は、1 つ以上の .NET Standard のバージョンを定義する (一部) ライブラリのセットについて説明しています。The NETStandard.Library metapackage (source) describes the set of libraries that define (in part) one or more .NET Standard versions.

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

  • .NET Standard の一部 (そのスコープだけ)。Part of .NET Standard (just its scope).
  • そのスコープの .NET Standard の複数のバージョン。Multiple versions of .NET Standard, for that scope.

便利に読めるようにし、特定の開発者シナリオ (コンパイラを使用するなど) を可能にするために、派生成果物が提供されています。Derivative artifacts are provided to enable more convenient reading and to enable certain developer scenarios (for example, using a compiler).

パッケージ表現Package representation

.NET Standard 参照アセンブリの主要な配布手段は NuGet パッケージです。The primary distribution vehicle for the .NET Standard reference assemblies is NuGet packages. 実装は、各 .NET 実装に適切なさまざまな方法で配布されます。Implementations are delivered in a variety of ways, appropriate for each .NET implementation.

NuGet パッケージは 1 つまたは複数のフレームワークを対象にしています。NuGet packages target one or more frameworks. .NET Standard パッケージは、".NET Standard" フレームワークを対象にしています。The .NET Standard packages target the ".NET Standard" framework. netstandard compact TFM (netstandard1.4 など) を使用して、.NET Standard フレームワークを対象にすることができます。You can target the .NET Standard framework using the netstandard compact TFM (for example, netstandard1.4). 複数のランタイムでの実行を意図したライブラリは、このフレームワークを対象とする必要があります。Libraries that are intended to run on multiple runtimes should target this framework. 広範なセットの API の場合、.NET Standard 1.6 から 2.0 の間に使用できる API の数は 2 倍以上になったため、netstandard2.0 を対象としてください。For the broadest set of APIs, target netstandard2.0 since the number of available APIs more than doubled between .NET Standard 1.6 and 2.0.

NETStandard.Library メタパッケージは .NET Standard を定義する NuGet パッケージの完全なセットを参照しています。The NETStandard.Library metapackage references the complete set of NuGet packages that define .NET Standard. netstandard を対象とする最も一般的な方法は、このメタパッケージを参照することです。The most common way to target netstandard is by referencing this metapackage. それは、.NET Standard を定義する約 40 の .NET ライブラリと関連する API について説明しており、それらにアクセスできるようにしています。It describes and provides access to the ~40 .NET libraries and associated APIs that define .NET Standard. netstandard を対象とする追加のパッケージを参照して、追加の API にアクセスできます。You can reference additional packages that target netstandard to get access to additional APIs.

バージョン管理Versioning

仕様は 1 つだけではありませんが、段階的に拡張され、直線的にバージョン管理された API のセットです。The specification is not singular, but an incrementally growing and linearly versioned set of APIs. 標準の最初のバージョンは、API のベースライン セットを構築しています。The first version of the standard establishes a baseline set of APIs. それ以降のバージョンでは、API が追加され、以前のバージョンによって定義された API を継承しています。Subsequent versions add APIs and inherit APIs defined by previous versions. 標準から API を削除するために確立された取り決めはありません。There is no established provision for removing APIs from the standard.

.NET Standard は、1 つの .NET 実装に固有ではなく、それらの実装のいずれかのバージョン管理スキームに一致することもありません。.NET Standard is not specific to any one .NET implementation, nor does it match the versioning scheme of any of those runtimes.

いずれかの実装 (.NET Framework、.NET Core、Mono など) に追加された API は、本質的に基本的であると考えられる場合に、仕様に追加される候補とみなされる可能性があります。APIs added to any of the implementations (such as, .NET Framework, .NET Core and Mono) can be considered as candidates to add to the specification, particularly if they are thought to be fundamental in nature. 新しい.NET Standard のバージョン は、.NET 実装のリリースに基づいて作成されるので、.NET Standard PCL から新しい API を対象にすることができます。New versions of .NET Standard are created based on .NET implementation releases, enabling you to target new APIs from a .NET Standard PCL. バージョン管理メカニズムの詳細は、「.NET Core Versioning」(.NET Core のバージョン管理) で説明されています。The versioning mechanics are described in more detail in .NET Core Versioning.

.NET Standard のバージョン管理は、使用する場合に重要です。.NET Standard versioning is important for usage. .NET Standard のバージョンが指定されている場合、それと同じか以下のバージョンを対象とするライブラリを使用できます。Given a .NET Standard version, you can use libraries that target that same or lower version. 次の方法では、.NET Standard の対象設定に固有の、.NET Standard PCL の使用のワークフローを説明します。The following approach describes the workflow for using .NET Standard PCLs, specific to .NET Standard targeting.

  • PCL に使用する .NET Standard のバージョンを選択します。Select a .NET Standard version to use for your PCL.
  • .NET Standard と同じかそれ以下のバージョンに依存するライブラリを使用します。Use libraries that depend on the same .NET Standard version or lower.
  • それより上の .NET Standard バージョンに依存するライブラリを見つけた場合は、それと同じバージョンを採用するか、そのライブラリを使用しないようにする必要があります。If you find a library that depends on a higher .NET Standard version, you either need to adopt that same version or decide not to use that library.

.NET Standard を対象とするTargeting .NET Standard

netstandard フレームワークと NETStandard.Library メタパッケージの組み合わせを使用して、.NET Standard Library をビルドできます。You can build .NET Standard Libraries using a combination of the netstandard framework and the NETStandard.Library metapackage. .NET Core ツールを使用して .NET Standard を対象とする例を参照できます。You can see examples of targeting the .NET Standard with .NET Core tools.

.NET Framework 互換モード.NET Framework compatibility mode

.NET Standard 2.0 以降、.NET Framework 互換モードが導入されました。Starting with .NET Standard 2.0, the .NET Framework compatibility mode was introduced. この互換モードにより、.NET Standard プロジェクトは、あたかも .NET Standard にコンパイルされたかのように .NET Framework ライブラリを参照できます。This compatibility mode allows .NET Standard projects to reference .NET Framework libraries as if they were compiled for .NET Standard. .NET Framework ライブラリの参照は、Windows Presentation Foundation (WPF) API を使用するライブラリのような、一部のプロジェクトでは機能しません。Referencing .NET Framework libraries doesn't work for all projects, such as libraries that use Windows Presentation Foundation (WPF) APIs.

詳細については、「.NET Framework 互換モード」を参照してください。For more information, see .NET Framework compatibility mode.

.NET Standard ライブラリと Visual Studio.NET Standard libraries and Visual Studio

Visual Studio で .NET Standard ライブラリを作成するには、Windows の場合 Visual Studio 2017 バージョン 15.3 以降、macOS の場合 Visual Studio for Mac バージョン 7.1 以降がインストールされている必要があります。In order to build .NET Standard libraries in Visual Studio, make sure you have Visual Studio 2017 version 15.3 or later installed on Windows, or Visual Studio for Mac version 7.1 or later installed on macOS.

プロジェクトで .NET Standard 2.0 ライブラリを使用するだけである場合は、Visual Studio 2015 でこれを行うこともできます。If you only need to consume .NET Standard 2.0 libraries in your projects, you can also do that in Visual Studio 2015. ただし、NuGet クライアント 3.6 以降がインストールされている必要があります。However, you need NuGet client 3.6 or higher installed. Visual Studio 2015 用の NuGet クライアントは、NuGet のダウンロードのページからダウンロードできます。You can download the NuGet client for Visual Studio 2015 from the NuGet downloads page.

ポータブル クラス ライブラリとの比較Comparison to Portable Class Libraries

.NET Standard は、ポータブル クラス ライブラリ (PCL) に代わるものです。.NET Standard is the replacement for Portable Class Libraries (PCL). .NET Standard は、標準 BCL を精選し、結果として、.NET 実装間で高度な統一性を確立することによって、ポータブル ライブラリの作成の方法を向上しています。The .NET Standard improves on the experience of creating portable libraries by curating a standard BCL and establishing greater uniformity across .NET implementations as a result. .NET Standard を対象とするライブラリは、PCL つまり ".NET Standard ベースの PCL" です。A library that targets .NET Standard is a PCL or a ".NET Standard-based PCL". 既存の PCL は、"プロファイルベースの PCL" です。Existing PCLs are "profile-based PCLs".

.NET Standard と PCL プロファイルは、似たような目的で作成されましたが、主な点が異なります。.NET Standard and PCL profiles were created for similar purposes but also differ in key ways.

類似点:Similarities:

  • バイナリ コード共有に使用できる API を定義します。Define APIs that can be used for binary code sharing.

相違点:Differences:

  • .NET Standard は精選された API のセットで、PCL プロファイルは、既存のプラットフォームの交差部分によって定義されています。.NET Standard is a curated set of APIs, while PCL profiles are defined by intersections of existing platforms.
  • .NET Standard は線形的にバージョン管理されていますが、PCL プロファイルはそうではありません。.NET Standard linearly versions, while PCL profiles do not.
  • PCL プロファイルは Microsoft のプラットフォームを表し、.NET Standard はプラットフォームに依存しません。PCL profiles represents Microsoft platforms while the .NET Standard is platform-agnostic.

PCL 互換性PCL compatibility

.NET Standard は、PCL プロファイルのサブセットと互換性があります。.NET Standard is compatible with a subset of PCL profiles. .NET Standard 1.0、1.1、1.2 はそれぞれ PCL プロファイルのセットと重複します。.NET Standard 1.0, 1.1 and 1.2 each overlap with a set of PCL profiles. この重複は 2 つの理由で作成されました。This overlap was created for two reasons:

  • .NET Standard ベースの PCL がプロファイルベースの PCL を参照できるようにする。Enable .NET Standard-based PCLs to reference profile-based PCLs.
  • プロファイルベースの PCL を .NET Standard ベースの PCL としてパッケージできるようにする。Enable profile-based PCLs to be packaged as .NET Standard-based PCLs.

プロファイルベースの PCL の互換性は、Microsoft.NETCore.Portable.Compatibility NuGet パッケージで提供されています。Profile-based PCL compatibility is provided by the Microsoft.NETCore.Portable.Compatibility NuGet package. プロファイルベースの PCL を含む NuGet パッケージを参照するときに、この依存関係が必要です。This dependency is required when referencing NuGet packages that contain profile-based PCLs.

netstandard としてパッケージされたプロファイルベースの PCL は、通常パッケージされるプロファイルベースの PCL より使いやすくなります。Profile-based PCLs packaged as netstandard are easier to consume than typically packaged profile-based PCLs. netstandard パッケージは、既存のユーザーと互換性があります。netstandard packaging is compatible with existing users.

標準 .NET と互換性がある PCL プロファイルのセットを確認できます。You can see the set of PCL profiles that are compatible with the .NET Standard:

PCL プロファイルPCL Profile .NET Standard.NET Standard PCL プラットフォームPCL Platforms
Profile7Profile7 1.11.1 .NET Framework 4.5、Windows 8.NET Framework 4.5, Windows 8
Profile31Profile31 11.0 Windows 8.1、Windows Phone Silverlight 8.1Windows 8.1, Windows Phone Silverlight 8.1
Profile32Profile32 1.21.2 Windows 8.1、Windows Phone 8.1Windows 8.1, Windows Phone 8.1
Profile44Profile44 1.21.2 .NET Framework 4.5.1、Windows 8.1.NET Framework 4.5.1, Windows 8.1
Profile49Profile49 11.0 .NET Framework 4.5、Windows Phone Silverlight 8.NET Framework 4.5, Windows Phone Silverlight 8
Profile78Profile78 1.01.0 .NET Framework 4.5、Windows 8、Windows Phone Silverlight 8.NET Framework 4.5, Windows 8, Windows Phone Silverlight 8
Profile84Profile84 11.0 Windows Phone 8.1、Windows Phone Silverlight 8.1Windows Phone 8.1, Windows Phone Silverlight 8.1
Profile111Profile111 1.11.1 .NET Framework 4.5、Windows 8、Windows Phone 8.1.NET Framework 4.5, Windows 8, Windows Phone 8.1
Profile151Profile151 1.21.2 .NET Framework 4.5.1、Windows 8.1、Windows Phone 8.1.NET Framework 4.5.1, Windows 8.1, Windows Phone 8.1
Profile157Profile157 11.0 Windows 8.1、Windows Phone 8.1、Windows Phone Silverlight 8.1Windows 8.1, Windows Phone 8.1, Windows Phone Silverlight 8.1
Profile259Profile259 11.0 .NET Framework 4.5、Windows 8、Windows Phone 8.1、Windows Phone Silverlight 8.NET Framework 4.5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8

関連項目See also