本文へスキップ
株式会社オブライト
Software Development2026-11-12約13分で読めます

.NET 11 リリース — C# 15の新機能と.NET 8/9サポート終了後の移行手順

2026年11月10日に一般提供が始まった .NET 11 の要点を公式情報で整理。STS でサポートは2028年11月14日まで。C# 15 の union 型と closed 階層、.NET 8/9 のサポート終了、アップグレード手順、最低CPU要件の破壊的変更、.NET 10 に留まる判断基準まで解説する


.NET 11 は、Microsoft が2026年11月10日に一般提供(GA)を開始した .NET の最新メジャーバージョンです。標準期間サポート(STS)のリリースで、サポート期間は2年。言語は C# 15 が既定になり、union 型や closed 階層といった型システムの機能が入りました。同じ11月10日に .NET 8 と .NET 9 がサポート終了日を迎えているため、「今のうちに何へ上げるか」を決める必要があるチームも多いはずです。この記事では、公式ドキュメントで確認できた範囲で、新機能・サポート期間・アップグレード手順・破壊的変更をまとめます。

3行要点

- .NET 11 は2026年11月10日にGA。STS(サポート2年)で、サポート終了は2028年11月14日と公式ポリシーに記載されています
- .NET 8(LTS)と .NET 9(STS)は2026年11月10日でサポート終了。.NET 10(LTS)は2028年11月14日まで引き続きサポートされます
- C# 15 の union 型・closed 階層・コレクション式引数などが使え、既存アプリは TargetFramework を変えるだけでは移行されないため、破壊的変更(x86/x64 の最低CPU要件など)の確認が必要です

.NET 11 とは

.NET 11 は、ランタイム・ライブラリ・SDK・C# 15 をまとめた .NET の2026年版リリースです。ASP.NET Core 11、EF Core 11、.NET MAUI も同じタイミングで更新されています。.NET MAUI は .NET とは別のサポートポリシーに従うと公式アナウンスに書かれているため、MAUI を使う場合は MAUI 側のポリシーも確認してください。

ダウンロードは 公式の .NET 11 ダウンロードページ から入手できます。IDE は Visual Studio 2026 か、VS Code と C# Dev Kit の組み合わせが案内されています。リリース候補(RC)版を使っていた場合は、最終版の SDK・ランタイムと、それに合ったパッケージ・ワークロードへ移行するよう公式が案内しています。

サポート期間と LTS/STS の選び方

公式のサポートポリシーでは、偶数バージョンが LTS(長期サポート、3年)、奇数バージョンが STS(標準期間サポート、2年)です。公式は「STS と LTS は品質やサービス提供のポリシーは同じで、違いはサポート期間の長さだけ」と説明しています。また、サポートを受けるには最新のパッチを適用している必要があります。

バージョン種別初回リリース日サポート終了日期間
.NET 11STS2026年11月10日2028年11月14日2年
.NET 10LTS2025年11月11日2028年11月14日3年
.NET 9STS2024年11月12日2026年11月10日2年
.NET 8LTS2023年11月14日2026年11月10日3年

表から分かる点が一つあります。.NET 11 と .NET 10 のサポート終了日は、どちらも2028年11月14日です。つまり .NET 11 を選んでも、.NET 10 のまま使い続けても、サポートが切れる日は同じになります。.NET 11 を選ぶ理由はサポート期間の長さではなく、新機能や性能改善にあることになります。

.NET 8/.NET 9 のサポート終了で何が起きるか

.NET 8 と .NET 9 は2026年11月10日でサポートが終了しました。サポート終了後は、セキュリティ修正を含むパッチが提供されなくなります。アプリがすぐに動かなくなるわけではありませんが、新しく見つかった脆弱性への修正を受けられない状態になります。公式ポリシーでは、サポートの最後の6か月は「メンテナンス期間」でセキュリティ修正のみが提供される、とも説明されています。

移行先の選び方は次の節の表で整理しますが、基本は「.NET 8 や .NET 9 から .NET 10(LTS)または .NET 11 のどちらかへ」です。サポート終了前後の考え方の全体像は 「サポート終了」への備え も参考になります。

主な新機能

C# 15

C# 15 は、.NET 11 SDK で net11.0 を対象にしたプロジェクトの既定の言語バージョンです。メモリ安全性を除き、以下の機能に LangVersion の preview 指定は不要と公式ドキュメントに書かれています。以下のコード例は、公式の「What's new in C# 15」に載っている構文をもとにしています。

union 型は、「複数のケース型のうちのどれか1つ」を表す型で、union キーワードで宣言します。各ケース型からの暗黙変換が提供され、switch 式でケースの網羅性をコンパイラが検査します。

public record class Cat(string Name);
public record class Dog(string Name);
public record class Bird(string Name);

public union Pet(Cat, Dog, Bird);

Pet pet = new Dog("Rex");

string name = pet switch
{
    Dog d => d.Name,
    Cat c => c.Name,
    Bird b => b.Name,
};

closed 階層は、クラスに closed 修飾子を付けると、そのクラスを直接継承できるのが宣言元のアセンブリ内に限定される機能です。直接の派生型がコンパイル時に確定するため、すべてを処理する switch 式は既定アームなしでも網羅的と見なされます。なお、派生は推移的ではなく、closed クラスの非 closed な派生型は他のアセンブリでさらに継承できます。

public closed record class GateState;
public record class Closed : GateState;
public record class Open(float Percent) : GateState;

string Describe(GateState state) => state switch
{
    Closed => "closed",
    Open(var percent) => $"{percent}% open",
};

コレクション式引数は、コレクション式の先頭に with(...) を置いて、コンストラクターやファクトリメソッドへ引数(容量や比較子など)を渡せる機能です。

string[] values = ["one", "two", "three"];

// List<T> のコンストラクターに capacity を渡す
List<string> names = [with(capacity: values.Length * 2), .. values];

// HashSet<T> に比較子を渡す
HashSet<string> set = [with(StringComparer.OrdinalIgnoreCase), "Hello", "HELLO", "hello"];
// 大文字小文字を区別しないため要素は1つだけ

拡張インデクサーは、extension ブロックの中にインデクサーを宣言できる機能です。インデクサーはインスタンスメンバーなので、レシーバー引数に名前が必要です。ラベル付き break/continue は、外側のループや switch にラベルを付けて、内側から直接抜けたり次の反復へ進んだりできる機能で、ブール値のフラグや goto による回避策が不要になります。

public static class SequenceIndexer
{
    extension(IEnumerable<int> sequence)
    {
        public int this[int index] => sequence.ElementAt(index);
    }
}

outer: for (int row = 0; row < grid.Height; row++)
{
    for (int column = 0; column < grid.Width; column++)
    {
        if (grid[row, column].IsBlocked) { continue outer; }
        if (grid[row, column].IsGoal) { break outer; }
    }
}

このほか、C# 15 には「古いランタイム上での非仮想な静的インターフェースメンバー」が入っています。また、メモリ安全性(unsafe の考え方を見直す複数リリースにわたる取り組み)はプレビュー機能で、preview の言語バージョンが必要です。本番のコードでは、まず安定している機能から使うのが無難です。

ランタイムとライブラリ

- JIT の改善: 冗長な境界チェックや分岐の除去、デバーチャライズの改善、定数畳み込みの拡大などが挙げられています
- Native AOT: インターフェースのディスパッチに共有ヘルパーを使い、呼び出し箇所のコードを減らしてインターフェース中心の処理のスループットを改善します
- ハードウェア: x64 と Arm64 の対応環境で Half に FP16 命令を使用。SIMD のレーン操作の新 API も追加
- Runtime Async(プレビュー): async の中断・再開をランタイム側で処理します。net11.0 では EnablePreviewFeatures なしで、<Features>runtime-async=on</Features> を指定してオプトインします
- ライブラリ: Zstandard 圧縮、Process API の拡充、System.Text.Json の C# union 対応、LINQ の FullJoin など

ASP.NET Core

- OpenAPI 3.2 が既定になり、サーバー送信イベントのペイロード記述にも対応します。以前のバージョンを明示的に選ぶこともできます
- 非同期バリデーション: DataAnnotations に非同期 API が追加され、データベース参照などを await する検証が書けます
- SignalR の認証更新: 再接続せずに認証を更新できます
- Blazor の CacheView: 静的SSRでコンポーネントのサブツリーの描画結果をキャッシュします
- union は System.Text.Json を使う箇所(Minimal API や MVC の JSON ボディ)で使えますが、ルート・クエリ・ヘッダー・フォームのバインドには適用されません

EF Core 11

EF Core 11 は .NET 11 が必須です。GroupBy の翻訳の改善、リレーショナルプロバイダーでの LINQ FullJoin の翻訳、TPT/TPC 継承での複合型と JSON 列の対応などが入りました。SQL Server のベクトルインデックスと近似ベクトル検索は実験的扱いです。利用前に、プロバイダーの対応状況と EF Core 11 の破壊的変更を確認するよう公式が案内しています。

.NET MAUI

MAUI では、すべてのプラットフォームで CoreCLR が既定のランタイムになりました(JIT が許可されない Apple プラットフォームではプリコンパイルコードとインタープリターを使用)。Native AOT はオプトインで、Android 対応は実験的です。Microsoft.Maui.Controls.Compatibility は同梱されなくなったため、参照しているアプリは移行が必要です。

SDK とツール

- Native AOT の CLI ホストとMSBuild サーバーが既定で有効。--help などをマネージドCLIの起動なしで処理します
- ファイルベースアプリで #:include により複数ファイルに分割可能
- dotnet nuget add source と dotnet nuget update source に --min-publish-age-hours オプションが追加され、公開から一定時間が経っていないパッケージの利用を避ける設定ができます(公式は、脆弱性チェックの代替ではなく補助的な制御としています)
- dotnet test の拡張、コンテナー公開の再現可能なイメージダイジェストなど

# 公開から72時間未満のパッケージを使わない設定の例(ソース名は自分の環境のもの)
dotnet nuget update source nuget.org --min-publish-age-hours 72

アップグレード手順

公式は、既存アプリの手順を次の4つに整理しています。SDK をインストールしただけではアプリは .NET 11 に切り替わらない点に注意してください。

- 1. global.json で SDK を固定している場合は更新し、開発マシンとビルドエージェントに SDK をインストールする
- 2. ターゲットフレームワークを .NET 11 に更新し(プラットフォーム固有の接尾辞は維持)、パッケージとワークロードも更新する
- 3. 破壊的変更(最低CPU要件を含む)を確認する
- 4. テストを実行し、実際に近い負荷で計測する。公開モード、コンテナーのベースイメージ、ネイティブ依存、デプロイ先ホストも検証する

# インストール済みの SDK を確認
dotnet --list-sdks

# 新規コンソールアプリを .NET 11 で作成して実行
dotnet new console -n HelloDotnet11 -f net11.0
dotnet run --project HelloDotnet11
// global.json(SDK を固定している場合)
{
  "sdk": {
    "version": "<インストールした .NET 11 SDK のバージョン>"
  }
}
<!-- .csproj -->
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net11.0</TargetFramework>
  </PropertyGroup>
</Project>

global.json のバージョンは、dotnet --list-sdks で表示された .NET 11 の SDK のバージョンに合わせます。複数の SDK が入っている環境では、どの SDK でビルドされるかを dotnet --version で確認しておくと安全です。

破壊的変更の注意

公式の .NET 11 の破壊的変更 のページは「作業中で、完全な一覧ではない」と明記されています。分野別に一覧があるので、自分のアプリが使う領域を確認します。特に押さえたいのは次の点です。

1. 最低ハードウェア要件の引き上げ。 x86/x64 の最低基準が x86-64-v1 から x86-64-v2 に変わりました。x86-64-v2 は、従来の CMOV・CX8・SSE・SSE2 に加え、CX16・POPCNT・SSE3・SSSE3・SSE4.1・SSE4.2 を保証するものです。公式は、Windows 11 と Windows 10 で公式サポートされるすべての x86/x64 CPU がこれを満たし、これに満たない古いチップのサポートは2013年頃に終わっていると説明しています。非対応のCPUでは、「The current CPU is missing one or more of the baseline instruction sets.」のようなメッセージが出て起動に失敗する可能性があります。Arm64 の最低要件は変わりません。ただし ReadyToRun の対象が更新されており、条件を満たさない端末では JIT コンパイルへのフォールバックで起動のオーバーヘッドが増えることがあります。

2. .NET MAUI の変更。 モバイルのランタイムが Mono から CoreCLR に変わるのに伴い、Mono の埋め込み API やプロジェクトプロパティが使えなくなります。Android x86 は非サポートになり、最低 Android API レベルは24に引き上げられました。

3. SDK・ライブラリ側の挙動変更。 Native AOT の CLI コマンド処理の既定有効化、Unix での名前付きミューテックスの既定スコープ、Math.Round の丸め結果、依存性注入のスコープ破棄時の例外の集約、IHost.RunAsync が BackgroundService の失敗で例外を投げるようになる点など、分野別に多数あります。動作が変わる箇所は「挙動の変更」として分類されているので、テストで差分を確認してください。

.NET 10 LTS に留まるか、.NET 11 に上げるか

どちらも2028年11月14日にサポートが終わるため、「サポート期間が長いから10」という判断は成り立ちません。判断軸は、新機能が必要か、検証にかけられる工数があるか、という2点になります。

状況向いている選択理由
.NET 8/.NET 9 で動いていて、すぐに移行先が必要.NET 10(LTS)既に提供されている LTS で、サポート終了日は .NET 11 と同じ2028年11月14日
C# 15 の union・closed 階層を使いたい.NET 11C# 15 は .NET 11 SDK の既定言語バージョン
ASP.NET Core の OpenAPI 3.2 や EF Core 11 の新機能が必要.NET 11EF Core 11 は .NET 11 が必須
古い x86/x64 CPU のサーバー・端末が残っている先に環境を確認.NET 11 は x86-64-v2 未満のCPUで起動しない可能性がある
MAUI でモバイルアプリを運用中MAUI のポリシーと破壊的変更を確認してからCoreCLR への切り替えと Android API 24 への引き上げがある
検証の工数が取れない.NET 10 に留まる同じサポート終了日で、変更点を最小にできる

段階的に進めるなら、まず .NET 8/.NET 9 から .NET 10 へ上げてサポート切れを解消し、そのうえで新機能が必要になったプロジェクトから .NET 11 へ進める方法もあります。社内サーバーのOSやミドルウェアを含めた終了対応の考え方は Windows Server 2016 のサポート終了への対応 でも整理しています。

FAQ

.NET 11 はLTSですか?

いいえ、STS(標準期間サポート)で、サポート期間は2年です。公式のサポートポリシーでは、サポート終了日は2028年11月14日です。同じ日に .NET 10(LTS)も終了するため、期間の面では .NET 10 と変わりません。

.NET 8 や .NET 9 のアプリは、すぐに動かなくなりますか?

動かなくなるわけではありません。ただし2026年11月10日でサポートが終了したため、新しい脆弱性への修正パッチは提供されなくなります。.NET 10 か .NET 11 への移行計画を立てるのが望ましいです。

SDK を入れるだけで既存アプリは .NET 11 になりますか?

なりません。公式も、SDK のインストールだけではアプリのターゲットは変わらないと説明しています。csproj の TargetFramework を net11.0 に更新し、パッケージとワークロードの更新、破壊的変更の確認、テストを行う必要があります。

古いサーバーで .NET 11 は動きますか?

x86/x64 では最低基準が x86-64-v2 になり、これを満たさないCPUでは起動しない可能性があります。公式の説明では、Windows 11 と、Windows 10 で公式サポートされるCPUはこの条件を満たします。移行前に対象ハードウェアを確認してください。

この記事に関連する無料ツール(登録不要・その場で結果)

お気軽にご相談ください

お問い合わせ