Microsoft は、.NET Core 3.0 Preview 7 と Visual Studio 16.3 Preview 1 をリリースしました。これらを連携させることで、.NET Core と C# 8.0 で構築された Windows デスクトップ アプリケーションなどの新機能が有効になります。
NET Core 3.0 は、Windows デスクトップ アプリケーションで最も一般的に使用される 2 つのフレームワークである Windows Presentation Foundation (WPF) と Windows Forms をターゲットにすることができる、Microsoft のオープン ソースのクロス プラットフォーム .NET フォークの最初のバージョンです。
これは、これらのフレームワークがクロスプラットフォームで動作するようになったことを意味するものではなく、依然としてWindows専用です。ただし、Windowsでは.NET CoreにCOM相互運用性などの機能が追加されることを意味します。
.NET Core は、特に Windows 専用であるにもかかわらず、信頼できる .NET Framework ではなく、なぜデスクトップ アプリケーションを構築するのでしょうか。その理由の 1 つは、.NET Framework が今では一種のレガシー ランタイムになっており、一般提供が近づいている C# 8.0 をサポートしていないことです。
Microsoftは.NET Frameworkの安全性を重視し、互換性を維持したいと考えています。そのため、.NET Coreの一部の新機能やAPIはランタイムの変更を必要とするため、.NET Frameworkでは動作しません。この点に関する公式発表はこちらで、プログラムマネージャーのImmo Landwerth氏が、.NET Standard 2.1の新機能は.NET Frameworkには導入されず、.NET Standard 2.0が引き続き使用されると説明しています。
はい、互換性のない .NET 標準が複数あります。
つまり、開発者が新しい言語機能に対応し続けるためには、.NET Frameworkから離れる必要があるということです。これは、最終的には一般的なライブラリやコンポーネントにも問題となるでしょう。
Microsoft はすでに、.NET Core 3.0 以降のバージョンは .NET 5.0 となり、「Core」の指定がなくなることを発表しており、.NET Framework のレガシー ステータスが強調されています。
もちろん、欠点もあります。.NET Core 3.0 を使って WPF や Windows Forms アプリケーションを構築できるようになりましたが、これはこれまで使い慣れていた WPF や Windows Forms フレームワークと全く同じではありません。むしろ、これらはそれらのフレームワークの(オープンソースの)フォークであり、一部の API が欠落しています。Microsoft は、ガイドとして使用できる Portability Analyzer ツールを提供しています。
.NET Core 3.0 との互換性は実際には良好ですが、Windows Communication Foundation (WCF) は例外で、すべて移植されているわけではありません。
.NET Portability Analyzer を構成すると、Microsoft が作成したさまざまな .NET バリアントが思い出されます。
Portability Analyzer は、Windows Phone や Silverlight などの行き止まりのものも含め、.NET のバリエーションがいくつあるかを思い出させてくれる便利なツールでもあります。
移行のもう一つのメリットは、WPFとWindowsフォームがオープンソースになったことで、将来的な改善の可能性を活用できることです。これらのフレームワークは長年凍結状態にあり、Microsoftは開発者にユニバーサルWindowsプラットフォーム(UWP)への移行を促してきました。
.NET Core 開発者には、ランタイムライブラリがアプリケーションにバンドルされる自己完結型のデプロイメントオプションも用意されています。.NET Core 3.0 と C# 8.0 の機能を使用して Windows フォームアプリケーションを作成し、自己完結型のオプションを使用してフォルダーに公開し、そのフォルダーを Windows 7 PC にコピーすることで、この動作を確認しました。アプリケーションはすぐに実行されました。
「フレームワーク依存」の展開オプションもあり、システム全体の .NET Core 3.0 のインストールが使用されます。
.NET Core 3.0 Preview 7には「Go Live」ライセンスが付与されており、これはMicrosoftが本番環境でサポートしていることを意味します。これはまた、Microsoftが一般公開前にバグ修正以外の大きな変更を加える予定がないことも示唆していますが、プリンシパルプログラムマネージャーのリチャード・ランダー氏は、「注目すべき例外はWPF、Windows Forms、Blazor、Entity Frameworkです」と述べています。これはかなり大きなリストです。本番環境での使用に関しては、Microsoftはこれらの新しい機能や十分にテストされていない機能ではなく、主にASP.NETアプリケーションを想定していると考えられます。
最新の.NET Coreを使用するには、Visual Studio 16.3 Previewが必要です。Lander氏は自身の投稿へのコメントで、「本番環境アプリの開発という観点から、VS 16.3 Previewを使用することにリスクはないと考えています」と述べています。ただし、Windows Forms開発者は、.NET Framework用に作成されたフォームを共有できるマルチターゲットプロジェクトを作成しない限り、.NET Core 3.0を使用する際にフォームデザイナーを使用せずに作業する必要があります。
Microsoftが.NET Core 3.0への移行を熱望する理由の一つは、コンテナサポートの強化です。新バージョンはコンテナ対応となり、Dockerのメモリ制限とCPU制限をサポートします。詳細はこちらをご覧ください。
ASP.NET Core 3.0は、.NET Core 3.0およびVisual Studio 16.3と同じリリース群の一部です。含まれる機能の一つにBlazorがあり、C#を使用してWebユーザーインターフェースコンポーネントを構築できます。Blazorはサーバー側でもブラウザー側でも実行できます。ブラウザーで実行する場合はWebAssemblyを使用します。サーバー側BlazorはASP.NET Core 3.0に含まれますが、クライアント側Blazorはプレビュー版のままです。Blazorは、ブラウザーテクノロジを使用してC#で記述され、.NET Core上で実行されるクロスプラットフォームGUIへの道筋となります。
全体として、これは .NET のメインストリーム バージョンとしての .NET Core への移行における重要なステップですが、Windows 専用の .NET Framework が当面は存続することは間違いありません。®