C# 言語バージョンの構成
警告
LangVersion
要素を latest
に設定することは推奨されていません。 latest
設定にすると、インストールされているコンパイラで最新バージョンが使用されます。 これはマシンによって変わり、ビルドの信頼性が低下する可能性があります。 さらに、現在の SDK に含まれていないランタイム機能またはライブラリ機能を必要とする可能性がある言語機能も有効になります。
C# のバージョンを明示的に指定する必要がある場合は、いくつかの方法で実行できます。
- プロジェクト ファイルを手動で編集します。
- サブディレクトリ内の複数のプロジェクトに対して言語バージョンを設定する。
- LangVersion コンパイラ オプションを設定する。
ヒント
プロジェクト プロパティ ページで Visual Studio の言語バージョンを確認できます。 [ビルド] タブの下の [詳細設定] ページに選択されているバージョンが表示されます。
現在使用している言語バージョンを確認するには、コードに #error version
を入れます (大文字と小文字を区別します)。 このようにすると、コンパイラによって、コンパイラ エラー CS8304 と、使用されているコンパイラのバージョンと現在選択されている言語バージョンが含まれるメッセージが報告されます。 詳細については、「#error (C# リファレンス)」を参照してください。
Visual Studio で別の C# バージョンを選択できない理由
Visual Studio では、既定のバージョンがプロジェクトのターゲット フレームワーク (TFM
) に合わせて調整されているため、UI を使用して言語バージョンを変更するオプションが無効になる場合があります。 この既定の構成により、言語機能とランタイム サポート間の互換性が保証されます。
たとえば、ターゲット TFM
(たとえば、.NET 6 から .NET 9) に変更すると、言語バージョンが C# 10 から C# 13 に適宜更新されます。 この方法では、ランタイムの互換性に関する問題を回避し、サポートされていない言語機能による予期しないビルド エラーを最小限に抑えます。
自動的に選択されたものとは異なる特定の言語バージョンが必要な場合は、以下の方法を参照して、プロジェクト ファイル内の既定の設定を直接オーバーライドしてください。
プロジェクト ファイルを編集する
プロジェクト ファイルで言語のバージョンを設定できます。 たとえば、プレビュー機能に明示的にアクセスしたい場合は、次のように要素を追加します。
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
値 preview
では、コンパイラでサポートされている使用可能な最新のプレビュー C# 言語バージョンが使用されます。
複数のプロジェクトを構成する
複数のプロジェクトを構成するには、 要素を含む <LangVersion>
ファイルを (通常はソリューション ディレクトリに) 作成します。 以下の設定を Directory.Build.props ファイルに追加します。:
<Project>
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
</Project>
そのファイルが含まれるディレクトリのすべてのサブディレクトリ内のビルドで、プレビュー C# バージョンが使用されるようになります。 詳細については、「ビルドのカスタマイズ」を参照してください。
C# 言語バージョン リファレンス
重要
ターゲット TFM に関連付けられているバージョンより新しい C# 言語バージョンの使用はサポートされていません。
次の表では、現在のすべての C# 言語バージョンを示します。 古いコンパイラでは、すべての値が解釈されない場合があります。 最新の .NET SDK をインストールすると、一覧表示されているすべてにアクセスできます。
値 | 説明 |
---|---|
preview |
コンパイラは、最新のプレビュー バージョンの有効な言語構文をすべて受け入れます。 |
latest |
コンパイラは、最新リリース バージョンのコンパイラ (マイナー バージョンを含む) の構文を受け入れます。 |
latestMajor または default |
コンパイラは、最新リリースのメジャー バージョンのコンパイラの構文を受け入れます。 |
13.0 |
コンパイラが受け入れるのは C# 13 以下に含まれている構文だけです。 |
12.0 |
コンパイラは、C# 12 以下に含まれている構文のみを受け入れます。 |
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) に含まれている構文のみを受け入れます。 |
.NET