自分の勉強がてらまとめています。公式ブログを日本語で、すぐ目を通せることを目的にしています。この記事では.NET 7のテーマについてまとめています。
.NET 7の新機能
フレームワークごとの新機能はそれぞれ公式ブログより提供されています。
シナリオ
.NET でできることになったことの一例が公式ブログやドキュメントで紹介されています。
- WebAssembly での実行に最適化された .NET ランタイムを含めることで、ブラウザーで実行されている React コードから既存の .NET ライブラリを呼び出すことができます。
- 厳密に型指定された C# を使用して、[SQL Server データベースに格納されている JSON ドキュメントの内容にアクセス]できます。
- 数行のコードを記述するだけで、OpenAPIを使って自動生成のドキュメントを含むセキュアなREST エンドポイントを迅速に構築してデプロイできます。
- C# ソースからAhead of Time (AOT) コンパイルを使用して合理化されたネイティブ アプリを生成し、コンテナー イメージに直接公開できます。
- Linuxと親和性の高いtar.gz形式にファイルを圧縮・解凍できる .NET Core アプリを組み込みAPIを使って構築できます。
- Android、iOS、および Windows でモバイル アプリを実装するために、ターゲット プラットフォームごとにネイティブ コードとコンポーネントを作成する単一のコードベースと設計を使用できます。
- アップグレード アシスタントを使用してレガシー アプリを自動的に移行することで .NET 7 のパフォーマンス上のメリットを享受し、CoreWCF を利用して Windows Communication Foundation (WCF) Web サービスを最新化します。
- アーキテクチャと設計の選択を反映したボイラープレート テンプレートを使用して、開発者が新しいアプリケーションをこれまで以上に簡単に開始できるようにします。
- Console.ReadKey を使用して、Unix/Linux でのキーコンビネーションとモディファイアキーの扱いを改善しました。
ユニファイド
1つの基本ライブラリ
.NET 7 を使用すると、1 つの SDK、1 つのランタイム、1 つの基本ライブラリ セットを使用してさまざまな種類のアプリ (クラウド、Web、デスクトップ、モバイル、ゲーム、IoT、AI) を構築できます。
.NET 7をターゲットにする
プロジェクトで次のように指定すると.NET 7で利用可能なすべてのAPIが利用できます。
<TargetFramework>net7.0</TargetFramework>
これに加えて、以下のターゲットフレームワークモニカー(TFM)を指定すると、OS固有のAPIが利用可能になります。
- net7.0-android
- net7.0-ios
- net7.0-maccatalyst
- net7.0-macos
- net7.0-tvos
- net7.0-windows
ARM64
L3キャッシュサイズの読み取りの改善や、LSEアトミック命令の導入によりランタイムのパフォーマンスを改善した。組み込み関数を利用するライブラリを最適化するため、Vector64, Vector128, Vector256などのクロスプラットフォーム ヘルパーを導入した。これらによるパフォーマンスの改善の詳細については以下のブログを参照。
Linux での .NET サポートの強化
.NET 6 は Ubuntu 22.04 (Jammy) に含まれており、apt install dotnet6
コマンドでインストールできます。さらに、すぐに使用できる最適化されたビルド済みの超小型コンテナーイメージも提供しています。
64 ビット IBM Power のサポート
RHEL8.7およびRHEL9.1をターゲットとするppc64le (64-bit IBM Power) アーキテクチャをサポートしました。
モダン
.NET MAUIが.NET 7に含まれ、Blazorも改善を進めました。
Announcing .NET MAUI for .NET 7 General Availability - .NET Blog
また、.NET Upgrade Assistantにより.NET FrameworkやUWPなアプリを、.NET 6および.NET 7に移行する手助けをしてくれます。
.NET 6への移行
LTSである .NET 6がリリースされてから、Microsoftのサービスを中心に多数のサービスが.NET 6への移行を行い、その記事が公開されています。
- The Azure Cosmos DB Journey to .NET 6 - .NET Blog
- Exchange Online Journey to .NET Core - .NET Blog
- OneService Journey to .NET 6 - .NET Blog
- Microsoft Graph's Journey to .NET 6 - .NET Blog
- Microsoft Teams' journey to .NET Core | .NET
- Microsoft Teams’ Infrastructure and Azure Communication Services’ Journey to .NET 6
- Bing Ads Campaign Platform – Journey to .NET 6 - .NET Blog
- The Stack Overflow journey to .NET 6 | The Art of Coding
クラウドネイティブ
dotnet publish
コマンドにより直接コンテナイメージを生成できるなどのコンテナのネイティブサポートの強化、オブザーバビリティ獲得のためOpenTelemetry対応の強化など、クラウドネイティブへの投資を続けています。
シンプル
C# 11
C#11、F# 7が追加されました。
特にC#11では、新機能の静的仮想インターフェイス メンバーも活用したGeneric Mathが導入され、数値演算をもつクラスを定義するのが簡単になります。
また、エスケープ シーケンスを必要とせずに、空白、改行、埋め込み引用符、およびその他の特殊文字を含む任意のテキストを含めることができる生の文字列リテラル(raw string literal)が導入されています。
.NET ライブラリ
.NET ライブラリにも以下のものを初めてとする機能追加が行われています。
- Microsoft.Extensions の Null 許容注釈
- System.Composition.Hostingでコンテナに単一のオブジェクトインスタンスを許可
- TimeStamp、DateTime、DateTimeOffset、TimeOnly へのマイクロ秒とナノ秒の追加
- Microsoft.Extensions.Cachingにメトリクスサポートを追加
- tar.gzを扱うSystem.Formats.Tar API
- DateOnlyなど新しく追加された型に対応した型コンバーター
- System.Text.Json コントラクトのカスタマイズ
- System.Text.Json 型がユーザー定義型階層のポリモーフィック シリアル化と逆シリアル化をサポート
.NET SDK
.NET CLIにパーサーとタブ補完が追加されました。また、.NET テンプレートに制約の概念が追加され、どのテンプレートが表示されるかをユーザー環境に応じて制御することができます。
NuGet
NuGet6.4がリリースされました。
その中の新機能として、多数のプロジェクトがあるソリューションにおいて利用するパッケージのバージョンをソリューションで制御できる、NuGet の中央パッケージ管理機能が追加されました。
パフォーマンス
.NET 7でもパフォーマンス改善が引き続き行わています。
TL;DR: .NET 7 is fast. Really fast. A thousand performance-impacting PRs went into runtime and core libraries this release, never mind all the improvements in ASP.NET Core and Windows Forms and Entity Framework and beyond. It’s the fastest .NET ever. If your manager asks you why your project should upgrade to .NET 7, you can say “in addition to all the new functionality in the release, .NET 7 is super fast.” Stephen Toub - MSFT
一言で言うと: .NET 7は速いです。本当に速いです。今回のリリースでは、ASP.NET CoreやWindows Forms、Entity Frameworkなどの改良を差し置いて、ランタイムとコアライブラリに1000ものパフォーマンスに影響を与えるPRが投入されました。これは史上最速の.NETです。もしあなたの上司が、あなたのプロジェクトが.NET 7にアップグレードすべき理由を尋ねたら、「リリースに含まれるすべての新機能に加えて、.NET 7は超高速です」と言えばよいのです。
詳細はこのブログにまとめらています。