.NET 7 の新機能

.NET 7 は .NET 6 の後継であり、統一性、モダン、シンプル、"高速" に重点を置いています。 .NET 7 は Standard Term Support (STS) リリース (旧称 Current リリース) として 18 か月間サポートされる予定です。

この記事では、.NET 7 の新機能を一覧で説明し、各項目のより詳細な情報へのリンクを示します。

.NET 7 用に更新されたすべての .NET 記事を確認するには、「.NET ドキュメント: .NET 7 リリースの新機能」を参照してください。

パフォーマンス

パフォーマンスは .NET 7 の重要な焦点であり、そのすべての機能はパフォーマンスを念頭において設計されています。 さらに、.NET 7 には、純粋にパフォーマンスを目的とした次のような機能強化が含まれています。

  • オンスタック置換 (OSR) は階層型コンパイルを補完するものです。 ランタイムでこれを使うと、現在実行中のメソッドによって実行されているコードを、その実行の途中で (つまり、"スタック上" にある間に) 変更できます。 実行時間が長いメソッドの場合、実行の途中で、より最適化されたバージョンに切り替えることができます。
  • ガイド付き最適化のプロファイル (PGO) が OSR と連携するようになり、(プロジェクト ファイルに <TieredPGO>true</TieredPGO> を追加することで) より簡単に有効にできるようになりました。 PGO を使うと、デリゲートなどの追加の処理をインストルメント化し、最適化することもできます。
  • Arm64 用のコード生成が機能強化されました。
  • ネイティブ AOT を使うと、外部に依存関係のないスタンドアロンの実行可能ファイルをターゲット プラットフォームのファイル形式で生成できます。 これは完全にネイティブであり、IL や JIT を使わないので、高速な起動時間、小さい自己完結型のデプロイという特徴があります。 .NET 7 のネイティブ AOT はコンソール アプリに重点を置いており、アプリをトリミングする必要があります。
  • Blazor WebAssembly、Android、iOS アプリに利用される Mono ランタイムのパフォーマンスが向上しました。

.NET 7 を高速にする多数のパフォーマンス重視の機能について詳しくは、.NET 7 のパフォーマンス向上に関するブログ記事を参照してください。

System.Text.Json のシリアル化

.NET 7 には、次の領域で System.Text.Json のシリアル化が機能強化されました。

  • コントラクトのカスタマイズにより、型のシリアル化と逆シリアル化の方法をより詳細に制御できます。 詳細については、「JSON コントラクトをカスタマイズする」を参照してください。
  • ユーザー定義型の階層に対するポリモーフィック シリアル化。 詳細については、「派生クラスのプロパティをシリアル化する」を参照してください。
  • 必要なメンバーのサポート。これは、逆シリアル化が成功するには JSON ペイロードに存在する必要があるプロパティです。 詳細については、「必須プロパティ」を参照してください。

これらとその他の更新の詳細については、.NET 7 の System.Text.Json の新機能に関するブログ記事を参照してください。

ジェネリック型数値演算

.NET 7 と C# 11 には数値演算を汎用的に実行できるイノベーションが含まれています。つまり、使っている正確な型を知る必要がありません。 たとえば、2 つの数値を加算するメソッドを記述する場合、以前は各型に対してメソッドのオーバーロードを追加する必要がありました。 今回、型パラメーターが数値に似た型に制限される単一のジェネリック メソッドを記述できるようになりました。 詳細については、「ジェネリック型数値演算」の記事とジェネリック型数学演算に関するブログ記事を参照してください。

正規表現

.NET の正規表現ライブラリは、.NET 7 で機能とパフォーマンスが大幅に向上しました。

  • RegexOptions.NonBacktracking の新しいオプションを使うと、バックトラッキングを回避し、入力の長さの線形時間処理を保証するアプローチを使う照合が可能になります。 非バックトラッキング エンジンは右から左方向の検索では使用できず、他にもいくつかの制限がありますが、どのような正規表現と入力でも高速です。 詳細については、「非バックトラッキング モード」を参照してください。

  • 正規表現ソース ジェネレーターは新機能です。 ソース ジェネレーターを使うと、コンパイル時に "実際の" パターンに合わせて最適化されたエンジンをビルドし、スループットのパフォーマンスを向上させることができます。 生成されたソースはプロジェクトの一部になるため、表示してデバッグすることができます。 さらに、新しいソース ジェネレーター診断 SYSLIB1045 を使うと、ソース ジェネレーターに変換される可能性のある Regex を使っている場所のアラートを受け取ることができます。 詳細については、「.NET 正規表現ソース ジェネレーター」を参照してください。

  • 大文字と小文字を区別しない検索の場合、.NET 7 ではパフォーマンスが大幅に向上しました。 このように向上した理由は、RegexOptions.IgnoreCase を指定しても、パターン内の各文字と入力内の各文字に対して ToLower が呼び出されなくなったためです。 その代わり、大文字と小文字に関するすべての作業は Regex の構築時に行われます。

  • Regex は、一部の API でスパンをサポートするようになりました。 このサポートの一環として、次の新しいメソッドが追加されました。

これらとその他の機能強化の詳細については、.NET 7 の正規表現の機能強化に関するブログ記事を参照してください。

.NET ライブラリ

.NET ライブラリ API に多くの機能強化が加えられました。 一部については、この記事の他の専用セクションで触れています。 その他の一部は次の表にまとめました。

説明 API 詳細情報
TimeSpanTimeOnlyDateTimeDateTimeOffset 型でマイクロ秒とナノ秒をサポートします - DateTime.Microsecond
- DateTime.Nanosecond
- DateTime.AddMicroseconds(Double)
- 新しい DateTime コンストラクター オーバーロード

- DateTimeOffset.Microsecond
- DateTimeOffset.Nanosecond
- DateTimeOffset.AddMicroseconds(Double)
- 新しい DateTimeOffset コンストラクター オーバーロード

- TimeOnly.Microsecond
- TimeOnly.Nanosecond

- TimeSpan.Microseconds
- TimeSpan.Nanoseconds
- TimeSpan.FromMicroseconds(Double)
- その他
これらの API は、マイクロ秒とナノ秒の値を決定するために "ティック" 値に対して計算を実行する必要がなくなったことを意味します。 詳細については、.NET 7 Preview 4 に関するブログ記事を参照してください。
Tar アーカイブの読み取り、書き込み、アーカイブ、抽出のための API System.Formats.Tar 詳細については、.NET 7 Preview 4.NET 7 Preview 6 に関するブログ記事を参照してください。
トラフィックを安全なレベルに保つことでリソースを保護するレート制限 API System.Threading.RateLimiting NuGet パッケージRateLimiter など 詳細については、「.NET での HTTP ハンドラーのレート制限」と「.NET のレート制限に関するお知らせ」を参照してください。
"すべて" のデータを Stream から読み取る API - Stream.ReadExactly
- Stream.ReadAtLeast
Stream.Read は、ストリームで使用できるものよりも少ないデータを返す可能性があります。 新しい ReadExactly メソッドを使うと、要求されたバイト数を "正確に" 読み取ることができます。また、新しい ReadAtLeast メソッドを使うと、要求されたバイト数 "以上" を読み取ることができます。 詳細については、.NET 7 Preview 5 に関するブログ記事を参照してください。
DateOnlyTimeOnlyInt128UInt128Half の新しい型コンバーター System.ComponentModel 名前空間内:

- DateOnlyConverter
- TimeOnlyConverter
- Int128Converter
- UInt128Converter
- HalfConverter
型コンバーターは、文字列との間で値の型を変換するためによく使われます。 これらの新しい API には、最近追加された型用の型コンバーターが追加されました。
IMemoryCache 用メトリックのサポート - MemoryCacheStatistics
- MemoryCache.GetCurrentStatistics()
GetCurrentStatistics() では、イベント カウンターまたはメトリック API を使って、1 つ以上のメモリ キャッシュの統計情報を追跡できます。 詳細については、.NET 7 Preview 4 に関するブログ記事を参照してください。
Unix ファイルのアクセス許可を取得および設定する API - System.IO.UnixFileMode 列挙型
- File.GetUnixFileMode
- File.SetUnixFileMode
- FileSystemInfo.UnixFileMode
- Directory.CreateDirectory(String, UnixFileMode)
- FileStreamOptions.UnixCreateMode
詳細については、.NET 7 Preview 7 に関するブログ記事を参照してください。
文字列で想定される構文の種類を示す属性 StringSyntaxAttribute たとえば、string パラメーターの属性として [StringSyntax(StringSyntaxAttribute.Regex)] を指定することで、パラメーターが正規表現を想定していることを指定できます。
ブラウザーや他の WebAssembly アーキテクチャで実行するときに JavaScript と相互運用する API System.Runtime.InteropServices.JavaScript JavaScript アプリは、.NET 7 で拡張された WebAssembly のサポートを使って、JavaScript から .NET ライブラリを再利用できます。 詳細については、「.NET 7 の任意の JavaScript アプリから .NET を使う」を参照してください。

可観測性

.NET 7 では、"監視" が機能強化されました。 監視は、スケーリングしたときや、技術的な複雑さが増したときのアプリの状態を理解するのに役立ちます。 .NET の監視の実装は、主に OpenTelemetry を中心に構築されています。 機能強化は次のとおりです。

詳細については、.NET 7 Preview 4 に関するブログ記事を参照してください。

.NET SDK

.NET 7 SDK では、CLI テンプレートのエクスペリエンスが向上しました。 また、コンテナーへの発行や、NuGet を使った中央パッケージ管理も可能になります。

テンプレート

dotnet new コマンドとテンプレートの作成にいくつかの歓迎すべき機能強化が加えられました。

dotnet new

dotnet new CLI コマンド。テンプレートに基づいて新しいプロジェクト、構成ファイル、またはソリューションを作成できます。以下を探索できるタブ補完をサポートするようになりました。

  • 使用できるテンプレート名
  • テンプレート オプション
  • 許容オプション値

また、適合性を高めるために、installuninstallsearchlistupdate サブコマンドには -- プレフィックスがなくなりました。

Authoring

.NET 7 の新しい概念であるテンプレートの "制約" を使うと、テンプレートが許可されるコンテキストを定義できます。 制約は、dotnet new listのようなコマンドでどのテンプレートを表示すべきかをテンプレート エンジンが決定するために役立ちます。 1 つのオペレーティング システム、テンプレート エンジン ホスト (たとえば、Visual Studio の .NET CLI や [新しいプロジェクト] ダイアログ)、インストールされているワークロードにテンプレートを制約できます。 制約はテンプレートの構成ファイルで定義します。

また、テンプレート構成ファイルでは、テンプレート パラメーターに複数の値を許可するように注釈を付けることができるようになりました。 たとえば、web テンプレートを使うと、複数の認証形式を許可できます。

詳細については、.NET 7 Preview 6 に関するブログ記事を参照してください。

コンテナーに発行する

コンテナーは、クラウド内でさまざまなアプリケーションやサービスを配布し、実行するための最も簡単な方法の 1 つです。 コンテナー イメージは .NET SDK のサポートされる出力形式になりました。また、dotnet publish を使ってアプリケーションのコンテナー化バージョンを作成できます。 この機能の詳細については、.NET SDK の組み込みのコンテナーに関するサポートのお知らせに関する記事を参照してください。 チュートリアルについては、「dotnet publish を使用して .NET アプリをコンテナー化する」を参照してください。

中央パッケージ管理

NuGet の中央パッケージ管理 (CPM) 機能を使って、プロジェクト内の共通の依存関係を 1 か所で管理できるようになりました。 これを有効にするには、リポジトリのルートに Directory.Packages.props ファイルを追加します。 このファイルの MSBuild プロパティ ManagePackageVersionsCentrallytrue に設定し、PackageVersion 項目を使って共通のパッケージの依存関係にバージョンを追加します。 こうすると、個々のプロジェクト ファイルでは、一元管理されているパッケージを参照する PackageReference 項目から Version 属性を省略できるようになります。

詳細については、中央パッケージ管理に関する記事を参照してください。

P/Invoke ソース生成

.NET 7 では、C# のプラットフォーム呼び出し (P/Invokes) 用のソース ジェネレーターが導入されました。 ソース ジェネレーターは、staticpartial メソッド上の LibraryImportAttribute を検索し、マーシャリング コードのコンパイル時ソース生成をトリガーします。 コンパイル時にマーシャリング コードを生成するので、DllImportAttribute を使う場合のように実行時に IL スタブを生成する必要がありません。 ソース ジェネレーターを使うと、アプリケーションのパフォーマンスが向上します。また、アプリを事前に (AOT) コンパイルすることもできます。 詳細については、「プラットフォーム呼び出し用のソース生成」と「ソースによって生成された P/Invoke でカスタム マーシャラーを使用する」を参照してください。

このセクションでは、.NET 7 のリリースと同じ時期にリリースされた関連製品についての情報を提供します。

Visual Studio 2022 バージョン 17.4

詳細については、「Visual Studio 2022 の新機能」を参照してください。

C# 11

C# 11 には、ジェネリック型数値演算、生の文字列リテラル、ファイルスコープ型、その他の新機能のサポートが含まれています。 詳細については、「C# 11 の新機能」を参照してください。

F# 7

F# 7 では、言語をよりシンプルにし、C# の新機能を使ってパフォーマンスと相互運用性を高める取り組みを続けています。 詳細については、「F# 7 に関するお知らせ」を参照してください。

.NET MAUI

.NET Multi-Platform App UI (.NET MAUI) は、C# と XAML を使用して、ネイティブのモバイル アプリやデスクトップ アプリを作成するためのクロスプラットフォーム フレームワークです。 Android、iOS、macOS、Windows 用の API が 1 つの API に統合されています。 最新の更新内容については、「.NET MAUI for .NET 7 の新機能」を参照してください。

ASP.NET Core

ASP.NET Core 7.0 には、レート制限ミドルウェア、最小限の API の機能強化、gRPC JSON トランスコーディングが含まれています。 すべての更新内容については、「ASP.NET Core 7 の新機能」を参照してください。

EF Core

Entity Framework Core 7.0 には、プロバイダーに依存しない JSON 列のサポート、変更保存のパフォーマンス向上、カスタム リバース エンジニアリング テンプレートが含まれています。 すべての更新内容については、「EF Core 7.0 の新機能」を参照してください。

Windows フォーム

.NET 7 用 Windows フォームに対して多くの作業が行われました。 次の領域で機能強化が行われました。

  • ユーザー補助
  • 高い DPI とスケーリング
  • データ バインド

詳細については、「.NET 7 の Windows フォームの新機能」を参照してください。

WPF

.NET 7 の WPF には、多数のバグ修正と、パフォーマンスとアクセシビリティの機能強化が含まれています。 詳細については、「.NET 7 の WPF の新機能」のブログ記事を参照してください。

Orleans

Orleans は、堅牢でスケーラブルな分散アプリケーションを構築するためのクロスプラットフォーム フレームワークです。 Orleans の最新の更新内容については、「Orleans 3.x から 7.0 に移行する」を参照してください。

.NET Upgrade Assistant と CoreWCF

.NET Upgrade Assistant は、サーバー側の WCF アプリを CoreWCF にアップグレードする機能をサポートするようになりました。これは、コミュニティによって作成された WCF から .NET (コア) への移植です。 詳細については、CoreWCF を使うように WCF サーバー側プロジェクトをアップグレードする方法に関する記事を参照してください。

ML.NET

ML.NET にテキスト分類 API が追加され、最新のディープ ラーニング手法を使ってカスタム テキスト分類モデルを簡単にトレーニングできるようになりました。 詳細については、「AutoML とツールの新機能」と「ML.NET テキスト分類 API の紹介」のブログ記事を参照してください。

関連項目