.NET 7 は .NET 6 の後継であり、統合、モダン、シンプル、高速に重点を置 いたものでした。 .NET 7 は、標準用語サポート (STS) リリース (以前は 現在 のリリースと呼ばれる) でした。
この記事では、.NET 7 の新機能の一覧を示し、それぞれの詳細情報へのリンクを示します。
パフォーマンス
パフォーマンスは .NET 7 の重要な焦点であり、すべての機能はパフォーマンスを念頭に置いて設計されています。 さらに、.NET 7 には、純粋にパフォーマンスを目的とした次の機能強化が含まれています。
- オンスタック置換 (OSR) は、階層化コンパイルの補数です。 これにより、ランタイムは、実行中のメソッドによって実行されているコードを、実行中の実行中に変更できます (つまり、"スタック上" である間)。 実行時間の長いメソッドは、実行中に最適化されたバージョンに切り替えることができます。
- プロファイルガイド付き最適化 (PGO) が OSR で動作し、(プロジェクト ファイルに
<TieredPGO>true</TieredPGO>
を追加することで) 有効にすることが容易になりました。 PGO では、デリゲートなどの追加の処理をインストルメント化して最適化することもできます。 - Arm64 のコード生成が改善されました。
- Native AOT は、外部依存関係のない、ターゲット プラットフォームのファイル形式でスタンドアロンの実行可能ファイルを生成します。 これは完全にネイティブであり、IL または JIT を使用せず、高速な起動時間と小規模で自己完結型のデプロイを提供します。 .NET 7 では、Native 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 のスパンがサポートされるようになりました。 このサポートの一部として、次の新しいメソッドが追加されました。
- Regex.EnumerateMatches
- Regex.Count
- Regex.IsMatch(ReadOnlySpan<Char>) (および他のいくつかのオーバーロード)
これらの機能強化とその他の機能強化の詳細については、.NET 7 の 正規表現の機能強化 ブログ記事を参照してください。
.NET ライブラリ
.NET ライブラリ API には多くの機能強化が行われています。 一部については、この記事の他の専用セクションで説明します。 その他の一部を次の表にまとめます。
説明 | API | 詳細情報 |
---|---|---|
TimeSpan、TimeOnly、DateTime、および DateTimeOffset 型でのマイクロ秒とナノ秒のサポート | - 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 | 詳細については、 |
トラフィックを安全なレベルに保つことでリソースを保護するためのレート制限 API | System.Threading.RateLimiting RateLimiter内の など | 詳細については、「.NET での HTTP ハンドラーのレート制限の |
"すべて" のデータを から読み取る APIStream | - Stream.ReadExactly - Stream.ReadAtLeast |
Stream.Read は、ストリームで使用できるデータよりも少ないデータを返す可能性があります。 新しい |
DateOnly 、TimeOnly 、Int128 、UInt128 、および Half 用の新しい型コンバーター |
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
- 新しい Activity.CurrentChanged イベント。マネージド スレッドのスパン コンテキストがいつ変化するかを検出するために使用できます。
- Activity プロパティの新しいパフォーマンスの高い列挙子メソッド: EnumerateTagObjects()、EnumerateLinks()、および EnumerateEvents()。
詳細については、.NET 7 Preview 4 ブログ記事を参照してください。
.NET SDK
.NET 7 SDK により、CLI テンプレートエクスペリエンスが向上します。 また、コンテナーへの発行や、NuGet を使用した一元的なパッケージ管理も可能になります。
テンプレート
dotnet new
コマンドとテンプレートの作成に対して、いくつかの歓迎の機能強化が行われました。
dotnet new
テンプレートに基づいて新しいプロジェクト、構成ファイル、またはソリューションを作成する dotnet new
CLI コマンドで、探索 タブ補完 がサポートされるようになりました。
- 使用可能なテンプレート名
- テンプレート オプション
- 許容範囲内のオプション値
さらに、適合性を向上するために、install
、uninstall
、search
、list
、および update
サブコマンドには、--
プレフィックスが付けなくなりました。
Authoring
テンプレート 制約、.NET 7 の新しい概念であり、テンプレートが許可されるコンテキストを定義できます。 制約は、テンプレート エンジンが、dotnet new list
などのコマンドに表示する必要があるテンプレートを決定するのに役立ちます。 テンプレートは、オペレーティング システム、テンプレート エンジン ホスト (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 プロパティの ManagePackageVersionsCentrally
を true
に設定し、PackageVersion
項目を使用して共通パッケージ依存関係のバージョンを追加します。 その後、個々のプロジェクト ファイルで、一元管理パッケージを参照する Version
項目から 属性を省略できます。
詳細については、「Central パッケージ管理」を参照してください。
P/Invoke ソース生成
.NET 7 では、C# のプラットフォーム呼び出し (P/Invokes) 用のソース ジェネレーターが導入されています。 ソースジェネレーターは、LibraryImportAttribute上のstatic
およびpartial
メソッドを探して、マーシャリングコードのコンパイル時ソース生成をトリガーします。 コンパイル時にマーシャリング コードを生成することで、DllImportAttributeを使用する場合と同様に、実行時に IL スタブを生成する必要はありません。 ソース ジェネレーターを使用すると、アプリケーションのパフォーマンスが向上し、アプリを事前にコンパイル (AOT) することもできます。 詳細については、「プラットフォーム呼び出し のソース生成」および「ソース生成 P/Invokesでカスタム マーシャラーを使用する」を参照してください。
関連リリース
このセクションには、.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 マルチプラットフォーム アプリ 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 は、堅牢でスケーラブルな分散アプリケーションを構築するためのクロスプラットフォーム フレームワークです。
ML.NET
ML.NET には、最新のディープ ラーニング手法を使用してカスタム テキスト分類モデルを簡単にトレーニングできるテキスト分類 API が含まれるようになりました。 詳細については、ブログ記事「AutoML とツールの最新情報」と「ML.NET テキスト分類 API の紹介」を参照してください。
関連項目
.NET