C#のバージョン一覧と確認・変更方法|最新C# 14/15 previewと.NET対応表を初心者向けに解説
はじめに
C#のバージョンを調べていると、「C# 14」「.NET 10」「.NET SDK 10」「Visual Studio 2026」など、似た数字が複数登場します。これらは関連していますが、同じものではありません。
2026年6月20日時点では、正式版の最新言語バージョンはC# 14です。次期バージョンのC# 15は、.NET 11 Preview 5などで試せるプレビュー版として提供されています。C# 14は.NET 10、C# 15 previewは.NET 11 previewと組み合わせるのが基本です。Microsoft Learn+2
Microsoft Learn+2
この記事では、C#のバージョン一覧、.NETとの対応関係、現在のバージョンを確認する方法、変更方法、C# 14とC# 15 previewの主な新機能まで、初心者にも分かりやすく解説します。
1. C#のバージョンとは?初心者が最初に押さえるべき基礎
1-1. C#のバージョンは「言語仕様」のバージョン
C#のバージョンとは、C#で使用できる構文や言語機能の世代を表すものです。
例えば、次のような機能は特定のC#バージョンから利用できるようになりました。
C# 8.0:null許容参照型、switch式
C# 9.0:record、トップレベルステートメント
C# 10:ファイルスコープ名前空間、global using
C# 11:生文字列リテラル、requiredメンバー
C# 12:プライマリコンストラクター、コレクション式
C# 13:
paramsコレクション、新しいLock型への対応C# 14:拡張メンバー、null条件付き代入
C# 15 preview:union型、closedクラス階層など
つまり、「C#のバージョンを上げる」とは、単に数字を変更するのではなく、より新しい構文やコンパイラ機能を利用できるようにすることを意味します。Microsoft Learn+2
Microsoft Learn+2
1-2. .NETのバージョン、SDKのバージョン、Visual Studioのバージョンとの違い
C#周辺には、主に次の4種類のバージョンがあります。
| 種類 | 役割 | 例 |
|---|---|---|
| C#バージョン | 使用できる言語構文を決める | C# 14 |
| .NETバージョン | 実行環境や標準ライブラリを決める | .NET 10 |
| .NET SDKバージョン | コンパイラ、ビルドツール、テンプレートなどを含む | 10.0.100 |
| Visual Studioバージョン | コード編集、デバッグ、ビルドを行うIDE | Visual Studio 2026 |
C#はプログラミング言語、.NETはC#プログラムを開発・実行するためのプラットフォームです。
.NET SDKにはC#コンパイラが含まれます。そのため、新しいC#バージョンを使用するには、その言語バージョンに対応した.NET SDKまたはVisual Studioが必要です。
1-3. C#のバージョンは基本的にターゲットフレームワークで決まる
現在のSDKスタイルのC#プロジェクトでは、C#バージョンを個別に設定しなくても、プロジェクトのターゲットフレームワークに応じて既定値が決まります。
例えば、次のプロジェクトではターゲットフレームワークが.NET 10なので、既定の言語バージョンはC# 14です。
XML<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
</Project>
Microsoftは、ターゲットフレームワークに対応する既定のC#バージョンを使用することを推奨しています。ターゲットフレームワークより新しいC#バージョンを指定する組み合わせは、正式にはサポートされません。Microsoft Learn+1
1-4. 「csharp バージョン」で検索する人が知りたいこと
「csharp バージョン」と検索する目的は、主に次のいずれかです。
C#の最新バージョンを知りたい
C#と.NETの対応表を確認したい
自分のプロジェクトが使用しているC#バージョンを知りたい
新しいC#構文が使えない原因を調べたい
C#バージョンを変更したい
Visual Studioや.NET SDKを更新する必要があるか判断したい
重要なのは、C#のバージョンだけを見るのではなく、ターゲットフレームワーク、SDK、IDE、CI/CD環境をセットで確認することです。
2. C#の最新バージョンは?C# 14とC# 15 previewの現在地
2-1. 安定版の最新はC# 14
2026年6月20日時点で、安定版の最新はC# 14です。
C# 14は2025年11月にリリースされ、.NET 10で正式にサポートされています。利用するには、原則として.NET 10 SDKまたはVisual Studio 2026を使用します。Microsoft Learn+1
新規プロジェクトで安定性を重視する場合は、次の組み合わせが第一候補です。
XML<TargetFramework>net10.0</TargetFramework>
LangVersionを指定しなければ、C# 14が自動的に選ばれます。
2-2. C# 15は.NET 11 previewで使えるプレビュー版
C# 15は、正式リリース前のプレビュー版です。2026年6月9日には.NET 11 Preview 5が公開されており、C# 15の新機能を試せます。
C# 15 previewの利用には、次のいずれかが必要です。
.NET 11 preview SDK
Visual Studio 2026 Insiders
.NET 11 preview SDKを使用できるVisual Studio CodeとC# Dev Kit
2026年6月時点で公開ドキュメントに掲載されている主な機能は、コレクション式の引数、union型、closedクラス階層です。Microsoft Learn+1
2-3. preview版を本番開発で使う前に知っておきたい注意点
preview版には、次のリスクがあります。
正式リリースまでに構文や仕様が変更される
一部の機能が未実装である
コンパイラやIDEに不具合が残っている可能性がある
preview SDKをCI/CD環境にも導入する必要がある
本番環境のサポート方針に合わない可能性がある
ライブラリや開発ツールが未対応の場合がある
例えば、C# 15 Preview 5のclosedクラス階層では、必要なランタイム属性がまだ同梱されておらず、利用プロジェクト側で属性を宣言する回避策が案内されています。また、union型にも今後のpreviewで実装予定の機能があります。Microsoft Learn
2-4. 初心者はどのC#バージョンを使えばよいか
初心者には、C# 14と.NET 10の組み合わせがおすすめです。
.NET 10はLTS版で、2028年11月までサポートされる予定です。安定した環境で最新のC#を学べるため、教材用、個人開発、業務システムの新規開発のいずれにも向いています。Microsoft Learn
C# 15 previewは、C# 14の基礎を理解した後に、新機能の検証用として使用するとよいでしょう。
3. C#バージョン一覧と.NET対応表
3-1. C# 15 preview/C# 14/C# 13/C# 12の対応.NET一覧
| C#バージョン | 対応する.NET | TFMの例 | 状態 |
|---|---|---|---|
| C# 15 | .NET 11 | net11.0 | preview |
| C# 14 | .NET 10 | net10.0 | 正式版 |
| C# 13 | .NET 9 | net9.0 | 正式版 |
| C# 12 | .NET 8 | net8.0 | 正式版 |
C# 15は.NET 11以降、C# 14は.NET 10以降、C# 13は.NET 9以降でサポートされます。ただし、.NET 11は現時点でpreview版であり、C# 15も正式版ではありません。Microsoft Learn+1
3-2. C# 11以前の主なバージョンと対応.NET一覧
| C#バージョン | 既定となる主なターゲット |
|---|---|
| C# 11 | .NET 7 |
| C# 10 | .NET 6 |
| C# 9.0 | .NET 5 |
| C# 8.0 | .NET Core 3.x、.NET Standard 2.1 |
| C# 7.3 | .NET Core 2.x、.NET Standard 1.x/2.0、.NET Framework |
| C# 7.2以前 | 古い.NET Framework環境など |
Microsoftが公開している現在の既定値では、すべての.NET FrameworkプロジェクトはC# 7.3が基準です。.NET FrameworkでC# 8以降を明示的に指定できるケースはありますが、ターゲットフレームワークより新しい言語バージョンの使用は正式サポート外となります。Microsoft Learn+1
3-3. C# 7.x/8.0/9.0/10.0で追加された代表的な機能
| バージョン | 代表的な機能 |
|---|---|
| C# 7.0 | タプル、分解、パターンマッチング、ローカル関数、破棄 |
| C# 7.1 | async Main、defaultリテラル、タプル要素名の推論 |
| C# 7.2 | readonly struct、in引数、ref struct |
| C# 7.3 | ジェネリック制約の拡張、タプルの比較、ref関連の改善 |
| C# 8.0 | null許容参照型、switch式、非同期ストリーム、範囲とインデックス |
| C# 9.0 | record、initアクセサー、トップレベルステートメント |
| C# 10 | ファイルスコープ名前空間、global using、record struct |
C# 8.0では、一部の機能が.NET Core 3.0のランタイムや標準ライブラリに依存するようになりました。この頃から、C#言語のバージョンと.NETのバージョンをセットで考える重要性が高まっています。Microsoft Learn+2
Microsoft Learn+2
3-4. .NET Frameworkを使っている場合のC#バージョンの考え方
.NET Framework 4.8などを使用している場合、既定のC#バージョンは7.3です。
新しいコンパイラを導入すると、一部の新しい構文をコンパイルできる場合があります。しかし、次のような問題が起こる可能性があります。
必要なランタイム機能が.NET Frameworkに存在しない
必要な標準ライブラリ型が存在しない
開発環境によってビルド結果が変わる
正式にサポートされない組み合わせになる
長期的にC# 8以降の機能を使用したい場合は、net8.0やnet10.0など、モダン.NETへの移行を検討するのが基本です。
.NET Frameworkとの互換性を維持するライブラリでは、必要に応じて.NET Standard 2.0をターゲットにする方法もあります。ただし、.NET Standard 2.0の既定言語バージョンはC# 7.3です。Microsoft Learn+1
3-5. Visual StudioのバージョンとC#対応状況の目安
| Visual Studio | 主なC#/.NET対応 |
|---|---|
| Visual Studio 2026 Insiders | C# 15 preview/.NET 11 preview |
| Visual Studio 2026 | C# 14/.NET 10 |
| Visual Studio 2022 17.12以降 | C# 13/.NET 9 |
| Visual Studio 2022 17.8以降 | C# 12/.NET 8 |
| Visual Studio 2022 17.4以降 | C# 11/.NET 7 |
| Visual Studio 2022 17.0以降 | C# 10/.NET 6 |
| Visual Studio 2019 16.8以降 | C# 9/.NET 5 |
| Visual Studio 2019 16.3以降 | C# 8/.NET Core 3.0 |
現在のC# 14にはVisual Studio 2026、C# 15 previewにはVisual Studio 2026 Insidersの利用が案内されています。SDKだけを別途インストールして、Visual Studio Codeなどからビルドすることも可能です。Microsoft Learn+2
Microsoft Learn+2
4. 自分のプロジェクトで使っているC#バージョンを確認する方法
4-1. csprojファイルでTargetFrameworkを確認する
まず、プロジェクト直下の.csprojファイルを開き、TargetFrameworkを確認します。
XML<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
この場合、LangVersionを別途指定していなければC# 14です。
複数のフレームワークを対象にするプロジェクトでは、TargetFrameworksが使われます。
XML<PropertyGroup>
<TargetFrameworks>net10.0;net8.0</TargetFrameworks>
</PropertyGroup>
この場合は、ターゲットごとに既定のC#バージョンや使用可能なAPIが異なる点に注意してください。Microsoft Learn
4-2. LangVersionの指定を確認する
.csprojにLangVersionがある場合は、その値が言語バージョンに影響します。
XML<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>14.0</LangVersion>
</PropertyGroup>
代表的な値は次のとおりです。
| 値 | 意味 |
|---|---|
14.0 | C# 14以下を使用 |
13.0 | C# 13以下を使用 |
preview | コンパイラが対応する最新preview機能を使用 |
latest | インストール済みコンパイラの最新正式機能を使用 |
latestMajor | コンパイラの最新メジャーバージョンを使用 |
通常はLangVersionを省略し、ターゲットフレームワークの既定値を使用するのが安全です。Microsoft Learn+1
より確実に現在の言語バージョンを確認したい場合は、C#コード内に一時的に次の行を追加する方法もあります。
C##error version
ビルドすると、CS8304エラーにコンパイラバージョンと選択中のC#言語バージョンが表示されます。確認後はこの行を削除してください。Microsoft Learn
4-3. Visual StudioでC#バージョンを確認する方法
Visual Studioでは、一般的に次の手順で確認できます。
ソリューションエクスプローラーでプロジェクトを右クリックする
「プロパティ」を開く
「ビルド」を選択する
「詳細設定」を開く
言語バージョンを確認する
現在のVisual Studioでは、言語バージョンを直接変更する項目は無効化される場合があります。これは、ターゲットフレームワークに対応した安全なC#バージョンを自動選択するためです。変更する場合は、ターゲットフレームワークを変更するか、.csprojを直接編集します。Microsoft Learn
4-4. dotnetコマンドで.NET SDKのバージョンを確認する方法
ターミナルやコマンドプロンプトで、次のコマンドを実行します。
Bashdotnet --version
現在のディレクトリで選択されるSDKバージョンが表示されます。
詳しい環境情報を確認する場合は、次のコマンドを使います。
Bashdotnet --info
インストール済みSDKを一覧表示する場合は、次のとおりです。
Bashdotnet --list-sdks
インストール済みランタイムは、次のコマンドで確認できます。
Bashdotnet --list-runtimes
dotnet --versionの結果は、global.jsonの影響を受ける場合があります。Microsoft Learn
4-5. 複数SDKが入っている場合に確認すべきポイント
.NET SDKは複数バージョンを同じコンピューターに共存させられます。
例えば、次のような状態です。
8.0.4xx
9.0.3xx
10.0.1xx
11.0.100-preview...
確認すべきポイントは次のとおりです。
プロジェクトまたは親ディレクトリに
global.jsonがないかdotnet --versionをプロジェクトのディレクトリで実行したかx64版とx86版のSDKを混同していないか
Visual Studioがpreview SDKを使用する設定になっているか
CI/CD環境にも同じSDKが入っているか
global.jsonが存在しない場合、通常はインストール済みの最も新しいSDKが選択されます。global.jsonがある場合は、その設定とロールフォワード規則に従ってSDKが選ばれます。Microsoft Learn
5. C#のバージョンを変更する方法
5-1. 基本はTargetFrameworkを変更してC#バージョンを上げる
推奨される方法は、TargetFrameworkを変更することです。
例えば.NET 8/C# 12から、.NET 10/C# 14へ変更する場合は、次のようにします。
変更前:
XML<TargetFramework>net8.0</TargetFramework>
変更後:
XML<TargetFramework>net10.0</TargetFramework>
これにより、LangVersionを設定していなければ、C# 12からC# 14へ自動的に切り替わります。
変更後は、次のコマンドで復元とビルドを行います。
Bashdotnet restore
dotnet build
dotnet test
5-2. csprojのLangVersionで明示的に指定する方法
C#バージョンを明示する場合は、.csprojにLangVersionを追加します。
XML<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>14.0</LangVersion>
</PropertyGroup>
新しいターゲットフレームワークを使いながら、古い言語仕様に制限することもできます。
XML<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>12.0</LangVersion>
</PropertyGroup>
一方、net8.0に対してC# 14を指定するなど、ターゲットフレームワークより新しい言語バージョンを使用する設定は正式サポート外です。Microsoft Learn+1
5-3. latest/previewを指定する場合のメリットと注意点
preview機能を使用するには、次のように指定します。
XML<LangVersion>preview</LangVersion>
previewは、現在のコンパイラが実装している最新preview構文を有効にします。
一方、latestは使用するコンパイラによって意味が変わります。
XML<LangVersion>latest</LangVersion>
開発者Aの環境ではC# 14、開発者Bの環境では将来のC# 15正式版が選択される、といった差が生じる可能性があります。そのためMicrosoftは、再現可能なビルドを重視するプロジェクトでlatestを指定しないよう注意しています。Microsoft Learn
安定した運用を優先する場合は、次のいずれかが適切です。
LangVersionを省略する14.0のように具体的なバージョンを指定する
5-4. Directory.Build.propsで複数プロジェクトに一括設定する方法
複数プロジェクトのC#バージョンを統一する場合は、ソリューションのルートなどにDirectory.Build.propsを作成します。
XML<Project>
<PropertyGroup>
<LangVersion>14.0</LangVersion>
</PropertyGroup>
</Project>
このファイルがあるディレクトリと、その配下にあるプロジェクトへ設定が適用されます。
preview版を一括設定する場合は、次のようにします。
XML<Project>
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
</Project>
C#とVisual Basicでは言語バージョンの番号体系が異なるため、両方のプロジェクトが混在するディレクトリへ無条件に指定しないよう注意が必要です。Microsoft Learn
5-5. Visual Studioから変更する方法
Visual Studioでは、プロジェクトのプロパティからターゲットフレームワークを変更します。
一般的な手順は次のとおりです。
プロジェクトを右クリックする
「プロパティ」を開く
「全般」または「アプリケーション」を開く
ターゲットフレームワークを変更する
プロジェクトを再読み込みする
復元、ビルド、テストを行う
言語バージョンそのものを変更したい場合は、通常.csprojを直接編集します。
6. C# 14の主な新機能
6-1. C# 14で追加・改善された機能の概要
C# 14の主な機能は次のとおりです。
拡張メンバー
null条件付き代入
非バインドジェネリック型への
nameofSpan<T>とReadOnlySpan<T>の暗黙変換の拡張型を省略したラムダ引数への修飾子
fieldを使ったフィールドバックプロパティpartialコンストラクターとpartialイベント
ユーザー定義複合代入演算子
ファイルベースアプリ向けプリプロセッサディレクティブ
C# 14は、大規模な書き方の変更というより、日常的なコードを簡潔にし、ライブラリ設計や高性能処理を改善する機能が多いバージョンです。Microsoft Learn+1
6-2. 初心者にも影響が大きい便利な変更点
特に分かりやすいのが、null条件付き代入です。
C# 13以前では、nullでないことを確認してから代入していました。
C#if (customer is not null)
{
customer.Name = "Taro";
}
C# 14では、次のように記述できます。
C#customer?.Name = "Taro";
customerがnullなら代入は行われません。
フィールドバックプロパティでは、コンパイラが生成するバッキングフィールドをfieldで参照できます。
C#public string Name
{
get;
set => field = value.Trim();
}
従来のように、自分で_nameフィールドを宣言する必要がありません。
拡張メンバーでは、拡張メソッドだけでなく、拡張プロパティや静的な拡張メンバーも定義できます。
C#public static class StringExtensions
{
extension(string value)
{
public bool IsBlank => string.IsNullOrWhiteSpace(value);
}
}
利用側では、通常のプロパティのように記述できます。
C#bool result = text.IsBlank;
6-3. 既存コードから移行するときの注意点
C# 14へ上げたからといって、既存コードをすべて新しい書き方へ変更する必要はありません。C#は原則として後方互換性を重視しており、従来の構文も引き続き使用できます。
ただし、次の点は確認してください。
新しいコンパイラ警告が追加されていないか
fieldという名前を既存コードで使用していないかオーバーロード解決の結果が変わらないか
ソースジェネレーターやアナライザーがC# 14に対応しているか
警告をエラー扱いしているプロジェクトでビルドが失敗しないか
言語バージョン変更後は、ビルドだけでなく自動テストも実行することが重要です。
6-4. C# 14を使うために必要な.NET 10環境
C# 14を正式に使用するには、次の環境が基本です。
.NET 10 SDK
net10.0を指定したプロジェクトVisual Studio 2026、Visual Studio Codeなど対応する開発環境
プロジェクトファイルは、最低限次のように設定します。
XML<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
C# 14を使用するだけなら、LangVersionの指定は不要です。
7. C# 15 previewの主な新機能と注意点
7-1. C# 15 previewで試せる機能の概要
2026年6月時点のC# 15 previewでは、主に次の機能が公開されています。
コレクション式の引数
union型
closedクラス階層
コレクション式の引数では、コレクションの容量や比較方法などをコレクション式内から指定できます。
C#string[] values = ["one", "two", "three"];
List<string> names =
[with(capacity: values.Length * 2), .. values];
union型は、値が複数の候補型のうち、いずれか一つであることを表現する機能です。
C#public record class Cat(string Name);
public record class Dog(string Name);
public record class Bird(string Name);
public union Pet(Cat, Dog, Bird);
候補型を網羅したswitch式では、コンパイラが網羅性を確認できます。
closedクラス階層では、直接派生できる範囲を同一アセンブリ内に制限し、派生型の集合をコンパイラが把握しやすくします。Microsoft Learn
7-2. .NET 11 preview SDKが必要な理由
新しいC#機能には、構文解析だけで完結するものと、ランタイムや標準ライブラリの追加機能を必要とするものがあります。
C# 15のunion型では、.NET 11 Preview 5以降に含まれるUnionAttributeやIUnionなどの型が使用されます。このため、古い.NET SDKへLangVersionだけを追加しても、完全なC# 15環境にはなりません。Microsoft Learn
7-3. preview機能を有効にする方法
.NET 11 preview SDKをインストールし、プロジェクトを次のように設定します。
XML<PropertyGroup>
<TargetFramework>net11.0</TargetFramework>
<LangVersion>preview</LangVersion>
</PropertyGroup>
インストールされているpreview SDKは、次のコマンドで確認できます。
Bashdotnet --list-sdks
global.jsonでSDKを固定している場合は、dotnet --list-sdksに表示された完全なバージョン番号を指定します。
JSON{
"sdk": {
"version": "インストール済みの完全なpreview SDKバージョン",
"allowPrerelease": true
}
}
global.jsonのversionには、11.0のような省略値ではなく、完全なSDKバージョンが必要です。Microsoft Learn
7-4. preview版を学習・検証用途にとどめるべきケース
次のようなプロジェクトでは、C# 15 previewを本番採用せず、検証用ブランチやサンプルプロジェクトに限定するのが安全です。
長期保守が必要な業務システム
厳格なサポート契約があるシステム
複数の開発会社が参加するプロジェクト
preview SDKをCI/CDへ導入できない環境
使用中のIDE、アナライザー、テストツールが未対応
正式リリース前の仕様変更を許容できないプロジェクト
正式版への移行時に書き直しが発生しても問題ない、学習用・技術検証用プロジェクトに向いています。
8. C#バージョン変更時によくあるエラーと対処法
8-1. 使用しているC#機能が現在のバージョンで使えないエラー
新しい構文を古いC#バージョンで使用すると、次のような内容のエラーが表示されます。
Feature '○○' is not available in C# 12.0.
Please use language version 14.0 or greater.
対処方法は、次のいずれかです。
ターゲットフレームワークを上げる
対応する範囲内で
LangVersionを変更する新しい構文を古い書き方へ戻す
基本的には、ターゲットフレームワークを上げる方法が推奨されます。Microsoft Learn
8-2. TargetFrameworkとLangVersionの組み合わせが合わないケース
例えば、次の設定は避けるべきです。
XML<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<LangVersion>14.0</LangVersion>
</PropertyGroup>
構文によってはコンパイルできても、C# 14が必要とするランタイム型やライブラリ機能が.NET 8に存在しない可能性があります。
適切な組み合わせは次のようになります。
XML<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>14.0</LangVersion>
</PropertyGroup>
または、LangVersionを省略します。
8-3. Visual Studioや.NET SDKが古い場合の対処法
TargetFrameworkをnet10.0へ変更した後、次のようなエラーが出ることがあります。
The current .NET SDK does not support targeting .NET 10.0.
この場合は、次の点を確認します。
.NET 10 SDKがインストールされているか
Visual Studioが.NET 10対応版か
必要なワークロードやターゲティングパックが入っているか
dotnet --versionで古いSDKが選ばれていないかglobal.jsonで古いSDKが固定されていないか
SDKの更新状況は、次のコマンドでも確認できます。
Bashdotnet sdk check
このコマンドは、インストール済みSDKやランタイムが最新か、サポート対象かを確認するために利用できます。Microsoft Learn
8-4. global.jsonで古いSDKが固定されている場合の確認方法
dotnet --list-sdksには.NET 10が表示されるのに、dotnet --versionでは.NET 8が表示される場合、global.jsonが原因かもしれません。
例:
JSON{
"sdk": {
"version": "8.0.302",
"rollForward": "latestFeature"
}
}
この設定では、基本的に.NET 8の範囲からSDKが選ばれます。
.NET 10へ移行する場合は、実際にインストールされているバージョンに合わせて更新します。
JSON{
"sdk": {
"version": "10.0.100",
"rollForward": "latestFeature",
"allowPrerelease": false
}
}
global.jsonは現在のディレクトリだけでなく、親ディレクトリに存在する場合も影響します。Microsoft Learn
8-5. NuGetパッケージやライブラリ互換性の確認ポイント
C#や.NETを上げるときは、次の項目を確認します。
NuGetパッケージが新しいターゲットフレームワークに対応しているか
使用中のパッケージが非推奨になっていないか
ASP.NET CoreやEntity Framework Coreのメジャーバージョン
ソースジェネレーターやアナライザーの対応状況
ネイティブライブラリの対応OSとCPU
テストフレームワークの対応状況
公開先サーバーに必要なランタイムがあるか
パッケージの互換性だけでなく、APIの破壊的変更や動作変更も確認してください。
ライブラリ開発では、複数ターゲットを設定して段階的に移行する方法もあります。
XML<PropertyGroup>
<TargetFrameworks>net10.0;net8.0</TargetFrameworks>
</PropertyGroup>
9. C#バージョンを上げるべきタイミングと判断基準
9-1. 新規プロジェクトなら最新の安定版を選ぶ
新規プロジェクトでは、特別な制約がなければ最新の安定版を選ぶのが基本です。
2026年6月時点では、次の組み合わせが有力です。
C# 14
.NET 10 LTS
Visual Studio 2026または対応する開発環境
最新の安定版を選ぶことで、言語機能、パフォーマンス、セキュリティ更新、開発ツールのサポートを受けやすくなります。
9-2. 既存プロジェクトでは.NETのLTS/STSを基準に判断する
.NETにはLTSとSTSがあります。
LTS:長期サポート版
STS:標準サポート版
2026年6月時点では、.NET 10はLTSとして2028年11月まで、.NET 9と.NET 8は2026年11月までサポートされる予定です。Microsoft Learn
既存システムでは、C#の新機能だけでなく、次の.NETサポート期限も考慮します。
現在の.NETがいつサポート終了するか
次のLTSへ移行する時期
OSやクラウドサービスが対応しているか
利用パッケージが新しい.NETへ対応しているか
9-3. チーム開発でバージョンを統一すべき理由
開発者ごとにSDKやC#バージョンが異なると、次のような問題が起こります。
自分の環境ではビルドできるが、他の環境では失敗する
IDEによってエラー表示が異なる
コードフォーマットやアナライザーの結果が異なる
CIではビルドできない
preview機能が意図せず使われる
チーム開発では、次の方法で統一します。
global.jsonでSDKを管理するTargetFrameworkをソース管理する必要なら
LangVersionを固定するCIで使用するSDKを明示する
開発環境のセットアップ手順を文書化する
9-4. 本番環境・CI/CD環境で確認すべきこと
ローカル環境だけ更新しても、CI/CDや本番環境が古いままでは正常にデプロイできません。
確認項目は次のとおりです。
CIイメージに対象SDKが入っているか
ビルドエージェントのVisual Studioが対応しているか
DockerのSDKイメージとRuntimeイメージが対応しているか
本番サーバーに対象ランタイムが入っているか
self-contained配布にする必要があるか
global.jsonとCIのSDK指定が一致しているかpreview SDKが許可されているか
CIでは、dotnet --infoの出力をログに残しておくと、環境差の調査がしやすくなります。
9-5. 無理に最新C#へ上げなくてもよいケース
次のような場合は、すぐに最新バージョンへ上げる必要はありません。
現在の.NETがサポート期間内である
使用したい新機能が特にない
移行テストの時間を確保できない
重要なライブラリが未対応
古いOSや実行環境をサポートする必要がある
顧客環境で新しいランタイムを導入できない
安定稼働を最優先する保守フェーズである
ただし、サポート終了後も古い.NETを使い続けると、セキュリティ更新を受けられなくなります。サポート期限を確認し、計画的に移行してください。Microsoft Learn
10. C#バージョンに関するよくある質問
10-1. C#と.NETは同じものですか?
同じものではありません。
C#はプログラミング言語です。.NETはC#などで作られたプログラムを開発・実行するためのプラットフォームです。
C#のコードはコンパイラによって変換され、.NETのランタイムや標準ライブラリを利用して動作します。
10-2. C#だけ最新にして.NETは古いまま使えますか?
技術的に一部の構文を利用できるケースはありますが、正式には推奨されません。
現在の公式方針では、ターゲットフレームワークに対応するC#バージョンより新しい言語バージョンを指定する組み合わせはサポート外です。
新しいC#機能が新しいランタイム型やライブラリAPIに依存している場合、コンパイルエラーや実行時エラーにつながります。基本的には.NETとC#を対応表どおりに更新してください。Microsoft Learn
10-3. .NET FrameworkでC# 14やC# 15は使えますか?
公式にサポートされる組み合わせではありません。
.NET Frameworkの既定言語バージョンはC# 7.3です。新しいコンパイラを使って一部の構文をコンパイルできる場合はありますが、C# 14やC# 15が必要とするランタイム機能や標準ライブラリが不足する可能性があります。
C# 14を正式に使用するなら.NET 10、C# 15 previewを試すなら.NET 11 previewへの移行が基本です。Microsoft Learn+2
Microsoft Learn+2
10-4. LangVersionにlatestを指定してもよいですか?
個人の検証用プロジェクトでは便利ですが、チーム開発や本番プロジェクトでは避けるのが無難です。
latestで選ばれるバージョンは、インストールされているコンパイラによって変わります。そのため、開発者のPCとCIで異なるC#バージョンが使われる可能性があります。
安定したビルドが必要なら、LangVersionを省略するか、次のように具体的な値を指定します。
XML<LangVersion>14.0</LangVersion>
Microsoftのドキュメントでも、latestを指定しないよう注意が示されています。Microsoft Learn
10-5. 初心者が学ぶならどのC#バージョンがおすすめですか?
2026年6月時点では、C# 14と.NET 10がおすすめです。
最新の正式機能を利用でき、.NET 10はLTS版なので、学習中に環境が短期間でサポート終了する心配も少なくなります。
ただし、古い教材でC# 10、11、12を使っていても、基礎構文の多くはC# 14でもそのまま利用できます。まずは変数、条件分岐、繰り返し、クラス、例外処理、コレクション、LINQ、非同期処理などの基本を学び、その後にC# 14固有の機能へ進むと理解しやすいでしょう。
まとめ
C#のバージョンは、使用できる言語構文や機能を表します。ただし、実際の開発ではC#だけでなく、.NET、.NET SDK、Visual Studioのバージョンを合わせて考える必要があります。
2026年6月20日時点の重要な組み合わせは、次のとおりです。
| 用途 | 推奨構成 |
|---|---|
| 安定した新規開発 | C# 14+.NET 10 LTS |
| C# 13の既存開発 | C# 13+.NET 9 |
| 長期運用中の既存環境 | サポート期限を確認して計画的に更新 |
| 次期機能の検証 | C# 15 preview+.NET 11 preview |
| .NET Framework | C# 7.3を基本とし、モダン.NETへの移行を検討 |
現在のC#バージョンを確認するときは、.csprojのTargetFrameworkとLangVersionを確認し、dotnet --version、dotnet --list-sdks、dotnet --infoも併用します。
C#バージョンを上げる場合は、LangVersionだけを無理に変更するのではなく、対応するターゲットフレームワークへ更新するのが基本です。新規開発ではC# 14と.NET 10、C# 15は学習・検証用途という基準で選ぶと、安定性と新しさのバランスを取りやすくなります。

