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

最新の C# コンパイラでは、プロジェクトのターゲット フレームワーク (1 つまたは複数) に基づいて既定の言語バージョンが決定されます。The latest C# compiler determines a default language version based on your project's target framework or frameworks. Visual Studio には値を変更するための UI がありませんが、それは csproj ファイルを編集することで変更できます。Visual Studio doesn't provide a UI to change the value, but you can change it by editing the csproj file. 既定値を選択すれば、ターゲット フレームワークと互換性がある最新の言語バージョンが使用されます。The choice of default ensures that you use the latest language version compatible with your target framework. プロジェクトのターゲットと互換性がある最新の言語機能にアクセスできるという利点があります。You benefit from access to the latest language features compatible with your project's target. また、このように既定値を選択すると、ターゲット フレームワークで利用できない型や実行時動作を必要とする言語が使用されません。This default choice also ensures you don't use a language that requires types or runtime behavior not available in your target framework. 既定値より新しい言語バージョンを選択すると、コンパイル時間や実行時エラーの診断が困難になることがあります。Choosing a language version newer than the default can cause hard to diagnose compile-time and runtime errors.

この記事の規則は、Visual Studio 2019 または .NET SDK に付属するコンパイラに適用されます。The rules in this article apply to the compiler delivered with Visual Studio 2019 or the .NET SDK. Visual Studio 2017 インストールまたは以前の .NET Core SDK バージョンに含まれる C# コンパイラは、既定で C# 7.0 を対象とします。The C# compilers that are part of the Visual Studio 2017 installation or earlier .NET Core SDK versions target C# 7.0 by default.

C# 8.0 は、.NET Core 3.x 以降のバージョンでのみサポートされています。C# 8.0 is supported only on .NET Core 3.x and newer versions. 最新機能の多くには、.NET Core 3.x で導入されたライブラリとランタイムの機能が必要になります。Many of the newest features require library and runtime features introduced in .NET Core 3.x:

C# 9.0 は、.NET 5 以降のバージョンでのみサポートされています。C# 9.0 is supported only on .NET 5 and newer versions.

[既定値]Defaults

コンパイラでは、以下の規則に基づいて既定値が決定されます。The compiler determines a default based on these rules:

ターゲット フレームTarget framework versionversion C# 言語の既定のバージョンC# language version default
.NET.NET 5.x5.x C# 9.0C# 9.0
.NET Core.NET Core 3.x3.x C# 8.0C# 8.0
.NET Core.NET Core 2.x2.x C# 7.3C# 7.3
.NET Standard.NET Standard 2.12.1 C# 8.0C# 8.0
.NET Standard.NET Standard 2.02.0 C# 7.3C# 7.3
.NET Standard.NET Standard 1.x1.x C# 7.3C# 7.3
.NET Framework.NET Framework allall C# 7.3C# 7.3

ご自分のプロジェクトが、対応するプレビュー バージョンの言語を持つプレビュー フレームワークをターゲットにしている場合、使用される言語バージョンはプレビュー バージョンの言語です。When your project targets a preview framework that has a corresponding preview language version, the language version used is the preview language version. 環境を問わず、そのプレビューでは最新の機能が使用されます。リリース済みの .NET Core バージョンをターゲットにするプロジェクトに影響はありません。You use the latest features with that preview in any environment, without affecting projects that target a released .NET Core version.

重要

Visual Studio 2017 では、作成されたすべてのプロジェクト ファイルに <LangVersion>latest</LangVersion> エントリが追加されました。Visual Studio 2017 added a <LangVersion>latest</LangVersion> entry to any project files it created. これは、追加されたときには C# 7.0 を意味しました。That meant C# 7.0 when it was added. しかし、Visual Studio 2019 にアップグレードすると、ターゲット フレームワークに関係なく、それは最新リリース バージョンを意味します。However, once you upgrade to Visual Studio 2019, that means the latest released version, regardless of the target framework. これらのプロジェクトでは既定の動作がオーバーライドされるようになりますThese projects now override the default behavior. プロジェクト ファイルを編集して、そのノードを削除する必要があります。You should edit the project file and remove that node. その後、プロジェクトでは、ターゲット フレームワークに対して推奨されるコンパイラ バージョンが使用されます。Then, your project will use the compiler version recommended for your target framework.

既定値のオーバーライドOverride a default

C# のバージョンを明示的に指定する必要がある場合は、いくつかの方法で実行できます。If you must specify your C# version explicitly, you can do so in several ways:

ヒント

現在使用している言語バージョンを確認するには、コードに #error version を入れます (大文字と小文字を区別します)。To know what language version you're currently using, put #error version (case sensitive) in your code. このようにすると、コンパイラによって、コンパイラ エラー CS8304 と、使用されているコンパイラのバージョンと現在選択されている言語バージョンが含まれるメッセージが報告されます。This makes the compiler report a compiler error, CS8304, with a message containing the compiler version being used and the current selected language version. 詳細については、「#error (C# リファレンス)」を参照してください。See #error (C# Reference) for more information.

プロジェクト ファイルを編集するEdit the project file

プロジェクト ファイルで言語のバージョンを設定できます。You can set the language version in your project file. たとえば、プレビュー機能に明示的にアクセスしたい場合は、次のように要素を追加します。For example, if you explicitly want access to preview features, add an element like this:

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

preview では、コンパイラでサポートされている使用可能な最新のプレビュー C# 言語バージョンが使用されます。The value preview uses the latest available preview C# language version that your compiler supports.

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

複数のプロジェクトを構成するには、<LangVersion> 要素を含む Directory.build.props ファイルを作成します。To configure multiple projects, you can create a Directory.Build.props file that contains the <LangVersion> element. この操作は通常、ソリューション ディレクトリで実行します。You typically do that in your solution directory. ソリューション ディレクトリ内の Directory.Build.props ファイルに以下を追加します。Add the following to a Directory.Build.props file in your solution directory:

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

そのファイルが含まれるディレクトリのすべてのサブディレクトリ内のビルドで、プレビュー C# バージョンが使用されます。Builds in all subdirectories of the directory containing that file will use the preview C# version. 詳細については、「ビルドのカスタマイズ」を参照してください。For more information, see Customize your build.

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

次の表では、現在のすべての C# 言語バージョンを示します。The following table shows all current C# language versions. コンパイラが古い場合、一部の値が正しく解釈されない可能性があります。Your compiler may not necessarily understand every value if it's older. 最新の .NET SDK をインストールすると、一覧表示されているすべてにアクセスできます。If you install the latest .NET SDK, then you have access to everything listed.

[値]Value 説明Meaning
preview コンパイラは、最新のプレビュー バージョンの有効な言語構文をすべて受け入れます。The compiler accepts all valid language syntax from the latest preview version.
latest コンパイラは、最新リリース バージョンのコンパイラ (マイナー バージョンを含む) の構文を受け入れます。The compiler accepts syntax from the latest released version of the compiler (including minor version).
latestMajor (default)latestMajor (default) コンパイラは、最新リリースのメジャー バージョンのコンパイラの構文を受け入れます。The compiler accepts syntax from the latest released major version of the compiler.
9.0 コンパイラは、C# 9.0 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 9.0 or lower.
8.0 コンパイラは、C# 8.0 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 8.0 or lower.
7.3 コンパイラは、C# 7.3 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 7.3 or lower.
7.2 コンパイラは、C# 7.2 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 7.2 or lower.
7.1 コンパイラは、C# 7.1 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 7.1 or lower.
7 コンパイラは、C# 7.0 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 7.0 or lower.
6 コンパイラは、C# 6.0 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 6.0 or lower.
5 コンパイラは、C# 5.0 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 5.0 or lower.
4 コンパイラは、C# 4.0 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 4.0 or lower.
3 コンパイラは、C# 3.0 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 3.0 or lower.
ISO-2 (または 2)ISO-2 (or 2) コンパイラは、ISO/IEC 23270:2006 C# (2.0) に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in ISO/IEC 23270:2006 C# (2.0).
ISO-1 (または 1)ISO-1 (or 1) コンパイラは、ISO/IEC 23270:2003 C# (1.0/1.2) に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in ISO/IEC 23270:2003 C# (1.0/1.2).

ヒント

お使いのマシンで使用可能な言語バージョンの一覧を表示するには、開発者コマンドライン シェルを開き、次のコマンドを実行します。Open a developer command-line shell, and run the following command to see the listing of language versions available on your machine.

csc -langversion:?

このように -langversion コンパイル オプションをクエリすると、次のような内容が出力されます。Querying the -langversion compile option like this prints something similar to the following:

Supported language versions:
default
1
2
3
4
5
6
7.0
7.1
7.2
7.3
8.0
9.0 (default)
latestmajor
preview
latest