C# 言語のバージョン管理

最新の C# コンパイラでは、プロジェクトのターゲット フレームワーク (1 つまたは複数) に基づいて既定の言語バージョンが決定されます。 Visual Studio には値を変更するための UI がありませんが、それは csproj ファイルを編集することで変更できます。 既定値を選択すれば、ターゲット フレームワークと互換性がある最新の言語バージョンが使用されます。 プロジェクトのターゲットと互換性がある最新の言語機能にアクセスできるという利点があります。 また、このように既定値を選択すると、ターゲット フレームワークで利用できない型や実行時動作を必要とする言語が使用されません。 既定値より新しい言語バージョンを選択すると、コンパイル時間や実行時エラーの診断が困難になることがあります。

C# 11 は、.NET 7 以降のバージョンでのみサポートされています。 C# 10 は、.NET 6 以降のバージョンでのみサポートされています。 C# 9 は、.NET 5 以降のバージョンでのみサポートされています。

Visual Studio のバージョンと.NET バージョンの対応表が必要な場合、Visual Studio プラットフォーム互換性ページをご覧ください。 Visual Studio for Mac のバージョンと.NET バージョンの対応表が必要な場合、Visual Studio for Mac プラットフォーム互換性ページをご覧ください。 C# バージョンと Mono の互換性については、C# の Mono ページを参照してください。

[既定値]

コンパイラでは、以下の規則に基づいて既定値が決定されます。

ターゲット フレーム version C# 言語の既定のバージョン
.NET 7.x C# 11
.NET 6.x C# 10
.NET 5.x C# 9.0
.NET Core 3.x C# 8.0
.NET Core 2.x C# 7.3
.NET Standard 2.1 C# 8.0
.NET Standard 2.0 C# 7.3
.NET Standard 1.x C# 7.3
.NET Framework all C# 7.3

ご自分のプロジェクトが、対応するプレビュー バージョンの言語を持つプレビュー フレームワークをターゲットにしている場合、使用される言語バージョンはプレビュー バージョンの言語です。 環境を問わず、そのプレビューでは最新の機能が使用されます。リリース済みの .NET Core バージョンをターゲットにするプロジェクトに影響はありません。

重要

Visual Studio 2017 の新しいプロジェクト テンプレートによって、新しいプロジェクト ファイルに <LangVersion>latest</LangVersion> エントリが追加されました。 これらのプロジェクトのターゲット フレームワークをアップグレードすると、既定の動作がオーバーライドされます。 .NET SDK を更新するときは、プロジェクト ファイルから <LangVersion>latest</LangVersion> を削除する必要があります。 その後、プロジェクトでは、ターゲット フレームワークに対して推奨されるコンパイラ バージョンが使用されます。 より新しい言語機能にアクセスするために、ターゲット フレームワークを更新できます。

既定値のオーバーライド

C# のバージョンを明示的に指定する必要がある場合は、いくつかの方法で実行できます。

ヒント

プロジェクト プロパティ ページで Visual Studio の言語バージョンを確認できます。 [ビルド] タブの下の [詳細設定] ページに選択されているバージョンが表示されます。

現在使用している言語バージョンを確認するには、コードに #error version を入れます (大文字と小文字を区別します)。 このようにすると、コンパイラによって、コンパイラ エラー CS8304 と、使用されているコンパイラのバージョンと現在選択されている言語バージョンが含まれるメッセージが報告されます。 詳細については、「#error (C# リファレンス)」を参照してください。

プロジェクト ファイルを編集する

プロジェクト ファイルで言語のバージョンを設定できます。 たとえば、プレビュー機能に明示的にアクセスしたい場合は、次のように要素を追加します。

<PropertyGroup>
   <LangVersion>preview</LangVersion>
</PropertyGroup>

preview では、コンパイラでサポートされている使用可能な最新のプレビュー C# 言語バージョンが使用されます。

複数のプロジェクトを構成する

複数のプロジェクトを構成するには、 要素を含む Directory.build.props ファイルを作成します。 この操作は通常、ソリューション ディレクトリで実行します。 ソリューション ディレクトリ内の Directory.Build.props ファイルに以下を追加します。

<Project>
 <PropertyGroup>
   <LangVersion>preview</LangVersion>
 </PropertyGroup>
</Project>

そのファイルが含まれるディレクトリのすべてのサブディレクトリ内のビルドで、プレビュー C# バージョンが使用されます。 詳細については、「ビルドのカスタマイズ」を参照してください。

C# 言語バージョン リファレンス

次の表では、現在のすべての C# 言語バージョンを示します。 コンパイラが古い場合、一部の値が正しく解釈されない可能性があります。 最新の .NET SDK をインストールすると、一覧表示されているすべてにアクセスできます。

説明
preview コンパイラは、最新のプレビュー バージョンの有効な言語構文をすべて受け入れます。
latest コンパイラは、最新リリース バージョンのコンパイラ (マイナー バージョンを含む) の構文を受け入れます。
latestMajor (default) コンパイラは、最新リリースのメジャー バージョンのコンパイラの構文を受け入れます。
11.0 コンパイラは、C# 11 以降に含まれる構文のみを受け入れます。
10.0 コンパイラは、C# 10 以下に含まれている構文のみを受け入れます。
9.0 コンパイラは、C# 9 以下に含まれている構文のみを受け入れます。
8.0 コンパイラは、C# 8.0 以下に含まれている構文のみを受け入れます。
7.3 コンパイラは、C# 7.3 以下に含まれている構文のみを受け入れます。
7.2 コンパイラは、C# 7.2 以下に含まれている構文のみを受け入れます。
7.1 コンパイラは、C# 7.1 以下に含まれている構文のみを受け入れます。
7 コンパイラは、C# 7.0 以下に含まれている構文のみを受け入れます。
6 コンパイラは、C# 6.0 以下に含まれている構文のみを受け入れます。
5 コンパイラは、C# 5.0 以下に含まれている構文のみを受け入れます。
4 コンパイラは、C# 4.0 以下に含まれている構文のみを受け入れます。
3 コンパイラは、C# 3.0 以下に含まれている構文のみを受け入れます。
ISO-2 (または 2) コンパイラは、ISO/IEC 23270:2006 C# (2.0) に含まれている構文のみを受け入れます。
ISO-1 (または 1) コンパイラは、ISO/IEC 23270:2003 C# (1.0/1.2) に含まれている構文のみを受け入れます。