0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【.NET】.NET 11 Preview 5の新機能を振り返る(SDK / CLI編)

0
Posted at

概要

.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 ファストパスの同梱・オプトイン: dotnet CLI を Native AOT アプリ化する取り組みの一環として、dotnet-aot ネイティブライブラリが同梱された(DOTNET_CLI_ENABLEAOT=true で有効化。現時点で AOT モードだけで動くコマンドはまだない)

まとめ

  • ファイルベースアプリが #:ref によるファイル分割に対応し、CLI コマンド側の対応も進んだ
  • CheckSdkVulnerabilities によるビルド時の SDK 脆弱性・EOL チェックがオプトインできるようになった
  • dotnet new mcpserver で MCP サーバーテンプレートが使えるようになり、コンソールアプリでも System.Net.Http.Json が既定で利用可能になった

ファイルベースアプリまわりの進化が特に活発で、正式リリースに向けて使い勝手がどんどん良くなっている印象です。

この記事が皆様のコーディングライフの助けになれば幸いです。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?