🤖
.NET Standard 2.0 とは何か
.NET Standard 2.0 とは何か
- .NET Standard は「各種 .NET 実行環境(.NET Framework, .NET Core, Xamarin, Unity など)で共通して利用できるAPIを標準化したもの」です。
- .NET Standard 2.0 をターゲットにクラスライブラリを作成すると、対応するすべての実行環境(.NET Framework 4.6.1 以降、.NET Core 2.0 以降、.NET 5/6/7 など)で利用できます。
- 逆にいえば、.NET Standard 2.0 に含まれないAPI(たとえば System.Web 関連など)を使うことはできません。
一方、.NET Framework 4.7.2 をターゲットにすると、基本的には 4.7.2 の環境でしか動かせません。4.7.2 より後のバージョン(たとえば 4.8)では動きますが、.NET Core や .NET 5/6/7 などの他の環境ではそのまま使うことはできません。
standard2.0 で作るメリット・注意点
-
マルチプラットフォーム対応
standard2.0 で書かれたライブラリは、.NET Framework 4.6.1 以降、.NET Core 2.0 以降、.NET 5/6/7 など、幅広いバージョン・プラットフォームで利用可能です。- 「将来的に .NET Core(.NET 6/7)で動かすかもしれない」といったニーズがある場合は、standard2.0 で作っておくとライブラリを再利用しやすいです。
-
広い互換性
.NET Standard 2.0 は、実行環境による API の差異を吸収し、共通APIを定義したものです。そのため、利用できるクラスやメソッドが多く、互換性が高いです。- 注意点として、.NET Standard 2.1 という新しいバージョンもありますが、これは .NET Framework と互換性がありません。現在も .NET Framework で使いたい場合は、2.0 を選ぶ必要があります。
-
使えない API がある
たとえばSystem.Web
(ASP.NETの内部実装に紐づくもの) や Windows レジストリ操作など、一部のAPIが .NET Standard に含まれていません。こうしたAPIを利用する場合は、そのままではコンパイルできず、エラーになったり別の実装に差し替える必要があります。
よくあるパターン
-
純粋なクラスライブラリが多い
- データモデルやユーティリティメソッドなど、UI と結びついていなかったり、Windows固有の依存がない場合は、
.NET Standard 2.0
が広く推奨されます。
- データモデルやユーティリティメソッドなど、UI と結びついていなかったり、Windows固有の依存がない場合は、
-
一部ライブラリが System.Web や Windows固有の機能に依存している
- その場合は .NET Standard でビルドできず、.NET Framework ターゲットのままにしておくか、マルチターゲットで対応する必要があります。
-
徐々に .NET Standard へ移行する
- 現在は大部分を .NET Framework で作っておき、影響範囲の小さいユーティリティ系ライブラリなどから
.NET Standard 2.0
対応に切り替える、という方法もあります。
- 現在は大部分を .NET Framework で作っておき、影響範囲の小さいユーティリティ系ライブラリなどから
まとめ
-
standard2.0 で作っても良いか?
→ 問題ありません。特に将来 .NET 5/6/7 や .NET Core など、ほかのランタイムでも再利用する可能性があるならメリットが大きいです。 -
ただし、.NET Standard 2.0 に含まれない API を使わないように注意が必要 です。
→ もしどうしても使う必要があるなら、フルフレームワーク専用の実装とマルチターゲットにするなど工夫が要ります。
Discussion