.NET Core 3.0.0 Preview 5がリリースされました
2019年5月6日、「.NET Core 3.0.0 Preview 5」がリリースされました。リリース情報
「.NET Core 3.0.0 Preview 5」のリリース情報です。- リリースアナウンス:Announcing .NET Core 3.0 Preview 5
- リリースノート:.NET Core 3.0.0 Preview 5 - May 06, 2019
- ダウンロードとインストール:.NET Core 3.0.0 Preview 5 - May 06, 2019
- 主な変更点:Notable Changes in 3.0.0 Preview 5
- 不具合報告:.NET Core 3.0.0 Preview 5
- 既知の問題:.NET Core 3.0 Preview Known Issue
「.NET Core 3.0.0 Preview 5」では、以下のコンポーネントがリリースされています。
- .NET Core Runtime 3.0.0-preview5-27626-15
- ASP.NET Core 3.0.0-preview5-19227-01
- .NET Core SDK 3.0.100-preview5-011568
Deb版.NET Core 3.0.0 Preview 5をインストールするには
現時点では、リポジトリーから「.NET Core 3.0.0 Preview 5」は提供されていないため、バイナリーを直接ダウンロードして「.NET Core 3.0.0 Preview 5」を起動してください。詳細は「ダウンロードとインストール」を参照してください。
Snap版.NET Core 3.0.0 Preview 5をインストールするには
Snap版「.NET Core 3.0.0 Preview 5」の利用が推奨されています。Snap版「.NET Core 3.0.0 Preview 5」をインストールするには、以下のコマンドを実行してください。
sudo snap install dotnet-sdk --beta --classic
「dotnet-sdk」は、以下のコマンドで利用できます。
dotnet-sdk.dotnet
もし「dotnet-sdk」コマンドで「dotnet-sdk.dotnet」を実行したいなら、以下のコマンドを実行してください。
sudo snap alias dotnet-sdk.dotnet dotnet
新機能や変更点の紹介
新機能や変更点の概略を紹介します。1.WPFとWindows Formsのパフォーマンス向上
「WPF」と「Windows Forms」のアセンブリーを「crossgen」により事前コンパイルするようになりました。この結果、パフォーマンスが有意に向上しました。
「.NET Core 3.0.0 Preview 4」と比較すると、起動パフォーマンスが明らかに向上しているとのフィードバックがコミュニティーから寄せられています。
「.NET Core 3.0.0 Preview 4」リリース時により広範囲の「WPF」のソースコードが公開されましたが、「WPF」のソースコードの公開作業は「.NET Core 3.0.0 Preview 7」で完了する予定です。
2.新しいSqlClientの導入
「SqlClient」は「SQL Server」や「Azure SQL Database」に接続する時に利用できるデータプロバイダーです。「.NET Framework」及び「.NET Core(3.0含む)」アプリにNuGetパッケージとして追加できる新バージョンの「SqlClient」が登場しました。
現在はプレビュー版です。
プレビュー版では、「.NET Core」上で「Always Encrypted」のサポートが行われています。
また以下の新機能の搭載が予定されています。
- データ分類(Data Classification)
- UTF-8サポート
「SqlClient」は「.NET Core 3.0」の開発スケジュールに近いスケジュールで、リリースや改良作業が予定されています。
System.Data.SqlClientはどうなるのか?
従来の「System.Data.SqlClient」も引き続きサポートされ、重要なセキュリティーアップデートが継続的に提供されます。現在「System.Data.SqlClient」を利用しているアプリが問題なく動作しているなら、「Microsoft.Data.SqlClient」へ移行する必要はありません。
ただし新機能は提供されないため、新機能を利用したければ「Microsoft.Data.SqlClient」へ移行する必要があります。
移行作業は簡単です。
基本的にパッケージをインストールし、新しい「SqlClient」の名前空間を変更するだけです。
ただしアプリによっては、新しい「SqlClient」が要求する「O/RM」のバージョンへアップデートしたり「O/RM」の設定を変更する必要があるでしょう。
3.単一EXEとして公開可能に(Single file bundling)
「dotnet publish」で単一のEXEファイルを公開できるようになりました。このEXEファイルは、自己展開型の実行ファイルです。
EXEファイルにはすべての依存データがリソースに含まれています。
起動時にすべての依存データを一時ディレクトリーにコピーし、一時ディレクトリーからアプリを読み込みます。
この展開は一度のみ行えば良く、次回以降は何らコストを掛けずに高速にアプリが起動します。
EXEファイルはアーキテクチャー固有の実行ファイルであり、「dotnet publish」にランタイム識別子の指定が必要になります。
詳細はリリースアナウンス及び以下を参照してください。
4.JSONシリアライザー
新しいJSONシリアライザー(JsonSerializer)は高パフォーマンスな「Utf8JsonReader」及び「Utf8JsonWriter」上に構築されています。JSONシリアライザーは、オブジェクトをJSONから逆シリアル化したり、オブジェクトをJSONにシリアル化します。
メモリーの使用量は最小限に抑えられており、「Stream」を利用して非同期にJSONの読み書きを行う機能もサポートされています。
「JsonSerializer」は「System.Text.Json.Serialization」名前空間にあります。
詳細やサンプルは、以下を参照してください。
Utf8JsonWriterの設計変更
「Utf8JsonWriter」の設計が変更され、「ref struct」から「class」になり、加えて「IDisposable」を実装しました。これにより直接ストリームへの書き出しをサポートできるようになりました。
また「JsonWriterState」は廃止され、「Utf8JsonWriter」に「JsonWriterOptions」を渡すように変更されました。
「Utf8JsonWriter」に「Reset」APIが追加され、「Utf8JsonWriter」のステートクリアと再利用が可能になりました。
「IBufferWriter<T>」がビルトインで追加され、「Utf8JsonWriter」と「ArrayBufferWriter<T>」を組み合わせて利用できるようになりました。
設計の変更に関する詳細は、以下を参照してください。
5.IndexとRange
「Index」と「Range」は、既存のインデクサーを利用できるようになりました。「Index」を使用したインデックスは、インデクサーを提供し、「Count」や「Length」プロパティーを持つすべてのタイプと組み合わせて利用できるようになります。
「Range」では、タイプが「Range」を受け入れるインデクサーを提供しているか、「Slice」メソッドがあるタイプで既存のインデクサーを利用することができます。
6.令和のサポート
「.NET Core」及び「.NET Framework」は、日本の日付フォーマット及び解析処理において、令和をサポートしました。「.NET Core/Framework」の令和サポートは、OSや日付処理を行うシステムに依存しています。
そのため完全な令和サポートを得るには、「Windows」では最新のアップデートを適用する必要があり、 「macOS」及び「Linux」では「ICU 64.2」以降のインストールが必要になります。
「.NET Core/Framework」における令和サポートについては、以下を参照してください。
7.Hardware Intrinsic APIの変更
「Avx2.ConvertToVector256*」は符号なしの値ではなく、符号ありの値を返すように変更されました。「Sse41/Avx.ConvertToVector128/256*」は、「Vector128/256<T>」を受け取るメソッドと「T*」を受け取るメソッドに分割されました。
「FloatComparisonMode」enumエントリーと「Sse/Sse2.Compare」メソッドは、操作内容を明確にするため、名称が変更されました。
8..NET Coreランタイムのロールフォワードポリシー
「.NET Coreランタイム(ランタイムバインダー)」は、メジャーバージョンのロールフォワードをオプトインポリシーとして有効にしました。デフォルトポリシーではパッチ及びマイナーバージョンのロールフォワードがすでに有効になっています。
メジャーバージョンのロールフォワードをデフォルトポリシーで有効にすることはありません。
詳細は以下を参照してください。
9.Linux向けDockerイメージのサイズ削減
「partial crossgen」と呼ばれる機能を活用し、ランタイムのサイズが約10MBほど削減されました。Alpine ARM64ランタイムイメージのサポートし、デフォルトのLinuxイメージを「Debian 10(Buster)」に切り替え、「Ubuntu 19.04」のサポートが追加されました。
通常リリース版の「Ubuntu」は本来サポート対象ではありませんが、次のLTSリリースである「Ubuntu 20.04 LTS」に向けた準備の一環としてサポートが追加されています。
同様の理由で将来「Ubuntu 19.10」のサポートも追加される予定です。
10.AssemblyLoadContextの改良
implicit typeを有効化し、シリアライザーなど呼び出し側がアプリではない場合は、「Type.GetType」経由でアセンブリーの読み込みを行えるようになりました。詳細は以下を参照してください。
11.COM-callable managed component
「.NET Core」をCOMアドインモデルで利用する時など、「.NET Core」でCOMサーバーを実装できるようになりました。「Windows」でのみ利用可能です。
12.GCのLarge pageのサポート
「GC」が「Large page」をサポートしました。Linuxでは「Huge Page」と呼ばれているものです。
「GCLargePages」はオプトイン機能として提供しており、「GCLargePages」の設定を「GC」に対して行えるようになりました。