そういえば.NET Standardって何なのか知らなかったので、少し調べてみたこと。
.NET Standardって何なのよ?
.NET Frameworkとか.NET Coreとかあるけれど、.NET Standardも同じようなフレームワークなの?→違います。仕様です。
.NET Standardは仕様
公式の説明によると、.NET Standard
というのは仕様
であって、実体のないAPIの目録みたいなもの。
で、この仕様に従って.NET Framework
や.NET Core
、Xamarin.iOS/Mac/Android
、UWP
といった様々な.NET実装
においてAPIが実装されている。
それぞれの.NET実装は「固有部分のAPI」+「.NET Standard実装部分のAPI」からなる。
この.NET Standardに従って実装されたAPIというのは、どの.NET実装でも使えるAPIなので、このAPIだけを使ってライブラリを作成すれば、そのライブラリをすべての種類のアプリケーションの作成において使うことができる。
.NET Standardのバージョンと各.NET実装の関係
ただし、.NET Standardにはもちろんバージョンがあり、各.NET実装のそれぞれのバージョンにおいて、どのバージョンの.NET Standardを実装しているかが異なる。
例えば、.NET Framework4.6が実装している.NET Standardのバージョンは1.3。
(公式の説明を参照。)
複数の.NET実装の間で共通のライブラリを作成する場合は、それぞれのバージョンに気を付ける必要がある。
.NET Standard準拠のライブラリありきで考えるとき
.NET Standard2.0に準拠したライブラリを作成し、それを.NET FrameworkとXamarin.Androidで使いたい場合、.NET Frameworkのバージョンは4.6.1以上、Xamarin.Androidのバージョンは8.0以上でなければならない。
既存のアプリケーションにあわせるとき
逆に、.NET Framework4.6のアプリケーションと、Xamarin.Android7.0のアプリケーションの間で一部処理をライブラリで共有化したい場合、ライブラリ作成時に選択する.NET Standardのバージョンは低いほうの「1.3」でなければならない。
.NET Standardの下位互換性
.NET Standardは下位バージョンのAPIを完全に含むので、下位互換性100%。
例えば、.NET Standard2.0に準拠しているということは、それ以前のバージョンである1.6や1.0のAPIも含んでいるということ。
おわりに
- .NET Standardはただの仕様。
- 各.NET実装において.NET Standardが実装されている。
- .NET Standardは下位互換性100%。