.NET クラス ライブラリ

クラス ライブラリは、.NET の共有ライブラリの概念です。 クラス ライブラリを使用すると、役に立つ機能をモジュールとしてコンポーネント化して、複数のアプリケーションで使用することができます。 また、アプリケーションの起動時には不要または認識されない機能を読み込むための手段としても使用できます。 クラス ライブラリは、.NET アセンブリ ファイルの形式を使用して記述されます。

次の 3 種類のクラス ライブラリを使用できます。

  • プラットフォーム固有 クラス ライブラリは、特定のプラットフォーム (たとえば、Windows 上の .NET Framework、Xamarin iOS) のすべての API にアクセスできますが、そのプラットフォームを対象とするアプリケーションとライブラリでのみ使用できます。
  • ポータブル クラス ライブラリは、API のサブセットへのアクセスがあり、複数のプラットフォームを対象とするアプリケーションとライブラリで使用できます。
  • .NET Standard クラス ライブラリは、プラットフォーム固有のライブラリとポータブル ライブラリの概念を両方の長所を持つ 1 つのモデルに統合しています。

プラットフォーム固有のクラス ライブラリ

プラットフォーム固有のライブラリは 1 つの .NET プラットフォーム (たとえば、Windows 上の .NET Framework) にバインドされるため、既知の 1 つの実行環境に大きく依存する可能性があります。 そのような環境では既知の API のセット (.NET および OS API) が公開され、予想される状態 (Windows レジストリ) が維持および公開されます。

プラットフォーム固有のライブラリを作成する開発者は、基になるプラットフォームのすべての機能を利用できます。 このライブラリは特定のプラットフォーム上でのみ実行されるので、プラットフォームの確認や他の形式の条件付きコードの確認は必要ありません (複数プラットフォーム用のモジュール単一ソース コード)。

プラットフォーム固有のライブラリは、 .NET Framework のプライマリ クラス ライブラリの種類です。 他の .NET 実装が登場しても、プラットフォーム固有のライブラリは、基準となるライブラリの種類として残っています。

ポータブル クラス ライブラリ

ポータブル ライブラリは、複数の .NET 実装でサポートされます。 このライブラリは、既知の実行環境に依存することは同じですが、その環境は、完全な .NET 実装のセットの共通部分によって生成されます。 公開される API およびプラットフォームの前提は、プラットフォーム固有のライブラリで使用できる機能のサブセットです。

ポータブル ライブラリを作成するときに、プラットフォームの構成を選択します。 そのプラットフォームの構成は、サポートする必要があるプラットフォーム (たとえば、.NET Framework 4.5 以降、Windows Phone 8.0 以降) のセットです。 サポートするプラットフォームが増えるほど、想定可能な API とプラットフォームが減り、共通分母が最小になります。 このような特性は、最初は混乱を招くことがあります。ユーザーは多くの場合、「多いほどよい」と考えますが、結果はサポートするプラットフォームが増えるほど、使用可能な API は少なくなります。

多くのライブラリ開発者は、1 つのソースから複数のプラットフォーム固有のライブラリを生成する方法 (条件付きコンパイル ディレクティブを使用) からポータブル ライブラリに切り替えています。 ポータブル ライブラリ内のプラットフォーム固有の機能にアクセスする方法はいくつかあります。現時点で最も広く採用されている手法は、bait-and-switch です。

.NET Standard クラス ライブラリ

.NET Standard ライブラリは、プラットフォームに固有のライブラリおよびポータブル ライブラリの概念に代わるものです。 これらは、基になるプラットフォームのすべての機能を公開するという意味でプラットフォーム固有です (統合プラットフォームまたはプラットフォームの交差はありません)。 これらは、すべてのサポートされるプラットフォーム上で機能するという意味でポータブルです。

.NET Standard は、ライブラリ "コントラクト" のセットを公開しています。 .NET 実装は、各コントラクトを完全にサポートするか、またはまったくサポートしない必要があります。 そのため、各実装は .NET Standard コントラクトのセットをサポートしています。 当然の結果として、各 .NET Standard クラス ライブラリは、コントラクトの依存関係をサポートするプラットフォームでサポートされています。

.NET Standard では、.NET Framework のすべての機能は公開されていません (それが目的でもありません)。ただし、ライブラリでは、ポータブル クラス ライブラリより多くの API が公開されています。

次の実装では、.NET Standard ライブラリがサポートされています。

  • .NET Core
  • .NET Framework
  • Mono
  • ユニバーサル Windows プラットフォーム (UWP)

詳細については、「.NET Standard」をご覧ください。

Mono クラス ライブラリ

クラス ライブラリは、前述の 3 種類のライブラリを含む Mono 上でサポートされます。 多くの場合、Mono は、.NET Framework のクロスプラットフォームの実装と見られます。 これは、部分的には、プラットフォーム固有の .NET Framework ライブラリを変更や再コンパイルせずに Mono ランタイム上で実行できるためです。 このような特徴は、ポータブル クラス ライブラリの作成前に見られたので、.NET Framework と Mono の間でバイナリを移植できるようにすることが当然の選択肢でした。