.NET 5と.NET Standardの関係
「.NET 5」と「.NET Standard」の関係が以下で紹介されています。今後新しい.NET Standardはリリースされない
今後新バージョンの「.NET Standard」はリリースされません。しかし「.NET 5」以降の「.NET」は、「.NET Standard 2.1」及びそれ以前の「.NET Standard」をサポートします。
また「.NET 5」は「.NET Standard」を置き換える存在であり、「.NET 5」を新バージョンの「.NET Standard(.NET Standard vNext)」と捉えることもできます。
TFMsの整理とアップデート
「.NET 5」はWindowsデスクトップアプリやクロスプラットフォームのモバイルアプリ、コンソールアプリ、クラウドサービス、ウェブサイトの開発に利用可能な機能及びAPI群を提供する単一のプラットフォームになります。言い換えれば「.NET 5」は、クロスプラットフォームで利用可能な機能と、「Windows」など固有のプラットフォームで利用可能な機能を提供します。
これを受け「.NET 5」では「TFMs(Target Framework Names)」が整理され、分かりやすい名称にアップデートされました。
クロスプラットフォームのTFM
例えば「TFM」の「net5.0」は、クロスプラットフォームで利用可能な機能及びAPI群を提供し、「netcoreapp」及び「netstandard」を組み合わせ、これらを置き換える「TFM」になります。つまり「net5.0」は「net5.0」がサポートしているどのOS上でも利用可能な機能を提供します。
ただし「.NET Standard」が「ACL」やレジストリー、「WMI」など「Windows」固有の機能をサポートしたように、一部の機能は例外的に除きます。
このような実装は本意ではありませんが、ライブラリーのエコシステムを確保するために妥協され盛り込まれた機能です。
OS依存のTFM
そして「TFM」の「net5.0-windows」は、特定のOS固有の機能を提供します。名称から分かる通り「net5.0-windows」は「Windows」固有の機能を提供する「TFM」です。
このような「TFM」は「net5.0」を含み、「net5.0」にOS固有の機能を加えた「TFM」になります。
他にも「net6.0-android」や「net6.0-ios」など、OS固有の機能を提供する「TFM」もあります。
.NETのバージョンとTFM
将来「.NET 6」がリリースされた暁には、これらの「TFM」は「net6.0-android」や「net6.0-ios」といったように、「.NET」のバージョンが「TFM」に反映されます。ターゲットの選択
他のソフトウェアから利用されるライブラリーを新規に開発する際、目的に応じて適切なターゲットを選択する必要があります。幅広く利用されるライブラリー
幅広く利用されるライブラリーを開発するなら、「.NET Standard 2.0」をターゲットに開発するのが好ましいでしょう。「.NET Standard 2.0」は「.NET Framework」でサポートされている最もバージョンが高い「.NET Standard」になります。
将来を見越すなら「.NET Standard 2.0」だけでなく、「.NET 5」もサポートすることが望ましいでしょう。
「.NET Standard 2.0」により幅広いサポートを提供できるだけでなく、「.NET 5」が提供する最新機能も活用できるようになります。
.NET Frameworkをサポートする必要がないなら
もし「.NET Framework」をサポートする必要がないならば、「.NET Standard 2.1」もしくは「.NET 5」をターゲットに開発するのが好ましいでしょう。多くのケースでは「.NET Standard 2.1」を飛ばして、「.NET 5」をターゲットにすることができるでしょう。
TFM
「.NET Framework」とその他すべてのプラットフォーム間でコードを共有したいなら、「netstandard2.0」を使用します。「Mono」、「Xamarin」、「.NET Core 3.x」間でコードを共有したいなら、「netstandard2.1」を使用します。
先を見据え将来に向けてコードを共有したいなら、「net5.0」を使用します。
.NETのリリース方針
「.NET 5」以降、「.NET」の新バージョンは毎年11月にリリースされる予定です。また隔年(つまり2年毎)に、長期サポートのLTS版(Long Term Support)がリリースされます。
例えば2020年11月にリリースされる「.NET 5」は、通常リリースの「.NET」になります。
そして2021年11月にリリースされる「.NET 6」は、LTSリリースの「.NET」になります。