これは、コンパイラがデフォルトで異なるターゲットフレームワークに異なるC#言語バージョンを使用するためです。
デフォルトのC#言語を上書きするには、プロジェクトファイルに追加します(問題の提案どおり)。
<PropertyGroup>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
または:
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
さまざまなターゲットフレームワークのデフォルトのC#言語バージョンと、C#言語バージョンを手動で選択する方法については、C#言語のバージョン管理を参照してください。
スタックオーバーフローの回答も参照してくださいC#8は.NET Frameworkをサポートしていますか?このトピックの詳細については。
これは、C#言語のバージョン管理に関する記事の一部です。
C#言語のバージョン管理
最新のC#コンパイラは、プロジェクトのターゲットフレームワークに基づいてデフォルトの言語バージョンを決定します。これは、C#言語に、すべての.NET実装で使用できるわけではないタイプまたはランタイムコンポーネントに依存する機能がある場合があるためです。これにより、プロジェクトがビルドされたターゲットに対して、デフォルトで互換性のある最高の言語バージョンが確実に得られます。
この記事のルールは、Visual Studio 2019または.NET Core 3.0 SDKで提供されるコンパイラーに適用されます。Visual Studio 2017インストールの一部であるC#コンパイラまたは以前の.NET Core SDKバージョンは、デフォルトでC#7.0をターゲットにしています。
デフォルト
コンパイラーは、以下の規則に基づいてデフォルトを決定します。
--------------------------------------------------------
Target framework | version | C# language version default
--------------------------------------------------------
.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
--------------------------------------------------------
デフォルトを上書きする
C#バージョンを明示的に指定する必要がある場合は、いくつかの方法で指定できます。
- プロジェクトファイルを手動で編集します。
- サブディレクトリ内の複数のプロジェクトの言語バージョンを設定します。
- -langversionコンパイラー・オプションを構成します。
プロジェクトファイルを編集する
プロジェクトファイルで言語バージョンを設定できます。たとえば、プレビュー機能へのアクセスを明示的に希望する場合は、次のような要素を追加します。
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
値preview
は、コンパイラがサポートする最新の利用可能なプレビューC#言語バージョンを使用します。
複数のプロジェクトを構成する
複数のプロジェクトを構成するために、要素を含むDirectory.Build.propsファイルを作成できます<LangVersion>
。通常は、ソリューションディレクトリで行います。以下をソリューションディレクトリのDirectory.Build.propsファイルに追加します。
<Project>
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
</Project>
今、そのファイルを含むディレクトリのすべてのサブディレクトリにビルドすると、プレビューC#バージョンが使用されます。詳細については、ビルドのカスタマイズに関する記事を参照してください。