概要
.NET 11 は2026年11月ごろの正式リリースが予定されています。プレビューも後半戦に入ってきましたので、これまでの Preview で追加された機能をトピックごとに振り返っています。
本記事では .NET SDK / CLI / テンプレート に関する Preview 5 の変更点をまとめます。ファイルベースアプリの強化や、dotnet new への MCP サーバーテンプレート同梱など、日々の開発に効いてくる更新が多く入っています。主なトピックは以下の通りです。
- ファイルベースアプリから他の C# ファイルを参照できるようになった
- CLI コマンドがファイルベースアプリをより一貫して扱えるようになった
- ビルド時に SDK の脆弱性・EOL チェックが可能になった
-
dotnet newに MCP サーバーテンプレートが同梱された - コンソールアプリが既定で
System.Net.Http.Jsonを含むようになった - そのほか(コンテナー発行の検証強化、
dotnet testの ANSI 無効化、NativeAOT CLI など)
本記事は .NET 11 Preview 5 の公式リリースノートを元に整理しています。プレビュー段階の内容のため、正式リリースまでに変わる可能性がある点にはご注意ください。
ファイルベースアプリから他の C# ファイルを参照できるようになった
.NET 10 で導入された、.csproj を作らずに単一の C# ファイルを直接実行できる「ファイルベースアプリ」ですが、Preview 5 ではコードを複数ファイルに分割できるようになりました。新しい #:ref ディレクティブで別のファイルをライブラリとして参照でき、推移的な参照もサポートされています。
// app.cs
#:ref lib.cs
Console.WriteLine(MyLib.Greeter.Greet("World"));
// lib.cs
namespace MyLib;
public static class Greeter
{
public static string Greet(string name) => $"Hello, {name}!";
}
あわせて #:include / #:exclude ディレクティブがフィーチャーフラグなしで使えるようになり、include したファイル内のディレクティブも推移的に処理されるようになりました。ちょっとしたスクリプトから始めて、少しずつ機能を分割していけるようになるのは嬉しい進化だと思います。
CLI コマンドがファイルベースアプリをより一貫して扱えるようになった
より多くの SDK コマンドがファイルベースアプリのパスを理解するようになりました。パッケージ系や NuGet 系のコマンドが仮想プロジェクトに対して動作するため、ファイルをプロジェクトに変換する前でもパッケージ操作が行えます。
dotnet package add app.cs System.CommandLine
dotnet package list app.cs
dotnet nuget why app.cs System.CommandLine
dotnet watch もファイルベースアプリに対して dotnet run と同じファイル選択ルールに従うようになりました。加えて、プロジェクトが存在するディレクトリで .cs ファイルを dotnet run に渡した場合などに、dotnet run --file <file> を促す警告が出るようになるなど、ありがちなミスに対するガイドも追加されています。
ビルド時に SDK の脆弱性・EOL チェックが可能になった
プロジェクト単位で、ビルド時に SDK の脆弱性チェックとサポート終了(EOL)チェックをオプトインできるようになりました。NuGet はすでに脆弱なパッケージを警告しますが、こちらは解決された .NET SDK 自体のバージョンを対象としています。
<PropertyGroup>
<CheckSdkVulnerabilities>true</CheckSdkVulnerabilities>
</PropertyGroup>
有効にすると、リストア時にバックグラウンドで SDK のリリースメタデータを更新し、ユーザーの .dotnet ディレクトリにキャッシュします。ビルドタスクはそのキャッシュを読むだけでネットワークにはアクセスしません。警告コードは以下の2種類で、<NoWarn> で片方だけ抑制することもできます。
warning NETSDK1236: The current .NET SDK (9.0.100) has known vulnerabilities ...
warning NETSDK1237: The current .NET SDK (7.0.410) is end of life as of 2024-05-14 ...
dotnet new に MCP サーバーテンプレートが同梱された
SDK に MCP(Model Context Protocol)サーバーのプロジェクトテンプレートが同梱され、別途テンプレートパッケージをインストールしなくても dotnet new で作成できるようになりました。
dotnet new mcpserver --transport local
ローカル / リモートのトランスポートに対応しており、自己完結型の発行や AOT シナリオ向けのオプションも用意されています。AI 連携が当たり前になりつつある中で、標準テンプレートとして入ってくるのは時代を感じるところです。
コンソールアプリが既定で System.Net.Http.Json を含むようになった
Microsoft.NET.Sdk を使い、net11.0 以降をターゲットとして暗黙的な using を有効にした C# プロジェクトでは、System.Net.Http.Json が自動的に取り込まれるようになりました。
using System.Net.Http;
HttpClient client = new();
Todo? todo = await client.GetFromJsonAsync<Todo>("https://example.com/todos/1");
record Todo(int Id, string Title);
これまで ASP.NET Core プロジェクトでしか暗黙的に使えなかった GetFromJsonAsync などが、コンソールやワーカーでも using System.Net.Http.Json; を明示せずに書けるようになります。
そのほかの変更
Preview 5 ではこのほかにも、以下のような更新が入っています。
-
コンテナー発行のベアラートークンレルム検証: レジストリ認証チャレンジで返される
realmが絶対 URI かつ HTTPS であることなどを、使用前に検証するようになった(破壊的変更のため、不正なレルムでは以前より早く失敗する) -
dotnet testの LLM 環境での ANSI 出力無効化: LLM 向け環境で実行された際にテスト出力の ANSI エスケープを無効化し、ログを解析しやすくする(COPILOT_CLIも検出対象に追加) -
NativeAOT CLI ファストパスの同梱・オプトイン:
dotnetCLI を Native AOT アプリ化する取り組みの一環として、dotnet-aotネイティブライブラリが同梱された(DOTNET_CLI_ENABLEAOT=trueで有効化。現時点で AOT モードだけで動くコマンドはまだない)
まとめ
- ファイルベースアプリが
#:refによるファイル分割に対応し、CLI コマンド側の対応も進んだ -
CheckSdkVulnerabilitiesによるビルド時の SDK 脆弱性・EOL チェックがオプトインできるようになった -
dotnet new mcpserverで MCP サーバーテンプレートが使えるようになり、コンソールアプリでもSystem.Net.Http.Jsonが既定で利用可能になった
ファイルベースアプリまわりの進化が特に活発で、正式リリースに向けて使い勝手がどんどん良くなっている印象です。
この記事が皆様のコーディングライフの助けになれば幸いです。
参考