Microsoftは、C# 15をデフォルトの言語バージョンとして導入する標準長期サポート(STS)リリースである.NET 11を公開しました。今回のアップデートは、コマンドライン体験を最適化し、AIエージェントがアプリケーションロジックと相互作用するための新しいインフラを提供することで、開発者の摩擦を軽減することに焦点を当てています。
言語の進化とC# 15
C# 15は、値が宣言されたケース型のセットのいずれかになれるユニオン型を導入します。これにより、開発者はジェネリックなオブジェクト型や無関係なベースクラスに頼ることなく、switch式において網羅性チェックを伴う複数の可能な状態を処理できるようになります。

このスクリーンショットは、C# 15におけるユニオン型とクローズド階層の実装例を説明しています。
このリリースでは、クラスの直接的な派生を宣言されたアセンブリに制限するクローズド階層も導入されます。これにより、コンパイラは特定の継承モデルにわたるパターンをチェックするために必要な情報を取得でき、ユニオン型の柔軟性を補完します。
「ユニオン型はその最大の追加機能の一つです。値は宣言されたケース型のセットのいずれかになり得、それらの型からの変換やswitch式における網羅性チェックが可能になります。」
— Announcing .NET 11 - .NET Blog
開発ワークフローの最適化
ツール実行の待機時間を短縮するため、.NET 11 SDKはNative AOT CLIホストをデフォルトで有効にします。これにより、'help'や'version'といったコマンドをマネージドCLIを起動せずに実行できるようになり、同時にMSBuildサーバーは呼び出しの間、ウォームな状態を維持して繰り返しの起動作業を回避します。
ファイルベースのアプリケーションでは、開発者は#:includeディレクティブを使用して、複数のソースファイルにわたってコードを拡張できるようになります。さらに、'dotnet watch'ツールは、Aspireアプリホストとの統合およびモバイルプロジェクト向けのクラッシュリカバリ機能で更新されました。
Runtime Asyncとパフォーマンスの向上
最も重要なアーキテクチャの転換の一つは、非同期の中断と再開をランタイムに移動するプレビュー機能「Runtime Async」です。コンパイラによって生成される状態マシンを不要にすることで、ランタイムはより明確なライブコールスタックを提供でき、プロファイラーやデバッガーは基礎となるインフラではなく、実際の非同期メソッドを表示できるようになります。
このリリースには、冗長な境界チェックを削除しデバイラル化を改善するJITコンパイラの改善を含む、数百のランタイム最適化が含まれています。また、ハードウェアサポートを拡張し、サポートされているx64およびArm64ハードウェアにおけるHalf演算用のFP16命令を含めることにも対応しています。
AI統合とエージェンティックな機能
Microsoftは.NET 11を「エージェンティック」な開発の基盤として位置づけています。SDKには、AIアプリケーションがツールを発見して呼び出すのを支援するMCP(Model Context Protocol)サーバーテンプレートが含まれており、Microsoft.Extensions.AIはモデルアクセス用のIChatClientのような標準的な抽象化を提供します。
Microsoft Agent Framework (MAF)は、これらの抽象化を基にエージェントとアプリケーションコードを調整します。これらのツールはASP.NET Coreと統合でき、Agent User Interaction Protocol (AG-UI)を使用してインタラクティブなBlazor体験を作成できます。
制限とトレードオフ
このリリースは重要なアップグレードを提供していますが、一部の機能はまだプレビュー段階であったり、特定の制限があったりします。例えば、Runtime Asyncはデフォルトの動作ではなく、新しいコンパイルモデルを使用するにはPropertyGroupを介した手動のオプトインが必要です。
さらに、System.Text.Jsonは現在F#の判別共用体(discriminated unions)をサポートしていますが、この特定の実装はソース生成、トリミング、およびNative AOTをサポートしていません。開発者は、トリミングされたアプリケーションでこの機能を使用する前に、これらの文書化された制限を確認する必要があります。
Hacker Newsの読者の反応
- 技術的な指摘: あるコメント投稿者は、decimalの処理における特定の変更を指摘し、.NET 11は.NET 10と比較して異なる精度結果を生成するように見えると述べています。 コメント ↗
- 技術的な指摘: あるコメント投稿者は、ランタイム管理による非同期実行への移行に驚きを表明し、これがスタックフルコルーチンの使用を意味するのか疑問を呈しました。 コメント ↗
- 懐疑的: 数人のコメント投稿者は、過去の放棄された技術の経験やクロスプラットフォームGUIスタックの欠如を挙げ、プラットフォームの長期的な生存可能性に対して懐疑的な意見を表明しました。 コメント ↗
- 体験談: AIバックエンドに.NETを使用しているある開発者は、このフレームワークは特にLinuxコンテナで実行する場合、これらのアプリケーションにとって非常に効果的であると報告しました。 コメント ↗
Hacker Newsのスレッドで出た意見の要約です。事実として検証されたものではありません。 議論の全文を読む ↗