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

最新の C# コンパイラでは、プロジェクトのターゲット フレームワーク (1 つまたは複数) に基づいて既定の言語バージョンが決定されます。The latest C# compiler determines a default language version based on your project's target framework or frameworks. これは、C# 言語には、.NET のすべての実装では使用できない型またはランタイム コンポーネントに依存する機能が存在する場合があるためです。This is because the C# language may have features that rely on types or runtime components that are not available in every .NET implementation. また、これにより、プロジェクトのビルド ターゲットが何であっても、互換性が最も高い言語バージョンが既定で選択されることが保証されます。This also ensures that for whatever target your project is built against, you get the highest compatible language version by default.

この記事の規則は、Visual Studio 2019 または .NET Core 3.0 SDK に付属するコンパイラに適用されます。The rules in this article apply to the compiler delivered with Visual Studio 2019, or the .NET Core 3.0 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.

[既定値]Defaults

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

ターゲット フレームTarget framework versionversion C# 言語の既定のバージョンC# language version default
.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

プレビューの既定値Default for previews

ご自分のプロジェクトが、対応するプレビュー バージョンの言語を持つプレビュー フレームワークをターゲットにしている場合、使用される言語バージョンはプレビュー バージョンの言語です。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 バージョンをターゲットとするプロジェクトに影響を与えずに、任意の環境においてそのプレビューで動作することが保証されている最新の機能を確実に使用できます。This ensures that you can use the latest features that are guaranteed to work with that preview in any environment without affecting your projects that target a released .NET Core version.

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

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

プロジェクト ファイルを編集する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 ファイルを作成することができます。You can create a Directory.Build.props file that contains the <LangVersion> element to configure multiple directories. この操作は通常、ソリューション ディレクトリで実行します。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# バージョンが使用されます。Now, builds in every subdirectory of the directory containing that file will use the preview C# version. 詳しくは、「ビルドのカスタマイズ」を参照してください。For more information, see the article on 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 is older. .NET Core 3.0 をインストールすれば、一覧のすべての値にアクセスできます。If you install .NET Core 3.0, then you will have access to everything listed.

[値]Value 説明Meaning
previewpreview コンパイラは、最新のプレビュー バージョンの有効な言語構文をすべて受け入れます。The compiler accepts all valid language syntax from the latest preview version.
latestlatest コンパイラは、最新リリース バージョンのコンパイラ (マイナー バージョンを含む) の構文を受け入れます。The compiler accepts syntax from the latest released version of the compiler (including minor version).
latestMajorlatestMajor コンパイラは、最新リリースのメジャー バージョンのコンパイラの構文を受け入れます。The compiler accepts syntax from the latest released major version of the compiler.
8.08.0 コンパイラは、C# 8.0 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 8.0 or lower.
7.37.3 コンパイラは、C# 7.3 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 7.3 or lower.
7.27.2 コンパイラは、C# 7.2 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 7.2 or lower.
7.17.1 コンパイラは、C# 7.1 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 7.1 or lower.
77 コンパイラは、C# 7.0 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 7.0 or lower.
66 コンパイラは、C# 6.0 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 6.0 or lower.
55 コンパイラは、C# 5.0 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 5.0 or lower.
44 コンパイラは、C# 4.0 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 4.0 or lower.
33 コンパイラは、C# 3.0 以下に含まれている構文のみを受け入れます。The compiler accepts only syntax that is included in C# 3.0 or lower.
ISO-2ISO-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-1ISO-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)