「宣言を使用する」機能は、C#7.3では使用できません。言語バージョン8.0以上を使用してください-あるマシンではエラーが発生しますが、別のマシンでは機能します


24

Visual Studio Enterprise 16.3.72つの別個のマシンで使用すると、1つは正常にビルドされ、もう1つのマシンはエラーをスローします。

「宣言を使用する」機能は、C#7.3では使用できません。言語バージョン8.0以降を使用してください。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

これは、https://stackoverflow.com/a/48085575/3850405で提案さLangVersion.csprojているように設定するか、上記の印刷画面のようにVisual Studioで自動的に修正することで、動作しないマシンで簡単に解決できます。

<LangVersion>8.0</LangVersion>

私が理解できないことは、なぜこの.csprojマシンがこのラインなしでうまく構築し、他のマシンがそれを必要とするのかということです。


あなたは、このようなエラーが出た場合、それはだ意味ない C#8プロジェクト、またはあなたは、分析のバグでReSharperのバージョンを使用する
パナギオティスKanavos

csprojのTargetFrameworkとLangVersionは何ですか?
Panagiotis Kanavos

@PanagiotisKanavosはい。ただし、プロジェクトは1台のマシンで構築されており、他のマシンでは構築されていません。ReSharperは使用されません。
Ogglas

これは、3.0 SDKが1つのマシンにないことを意味している可能性があります。何がdotnet --list-sdks表示されますか?
Panagiotis Kanavos

@PanagiotisKanavosターゲットフレームワーク.NET Framework 4.6.1LangVersionあり、設定されていません。
オグラス

回答:


20

私は同じエラーを受け取りましたが、単に含めることを忘れていました

<LangVersion>8.0</LangVersion>

ソリューション内のすべての.csprojファイルの属性。以下は、現在のc#8設定です。

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>
    <NullableContextOptions>enable</NullableContextOptions>
  </PropertyGroup>

コア2.2から3.xに移行するときに、次のドキュメントが最も役立つことがわかりました。

MSDN 2.2-> 3.0

MSDN 3.0-> 3.1


2
<LangVersion>latest</LangVersion>代わりに使用できます<LangVersion>8.0</LangVersion>
エリアフアーロン

1
最初のリンクMSDN 2.2 -> 3.0は以下にリンクすることを意図していると思います:docs.microsoft.com/en-us/aspnet/core/migration/22-to-30 回答を編集して修正しようとしましたが、「推奨編集キューいっぱいです」ので、代わりにここに投稿します。
ahillier88


10

これは、コンパイラがデフォルトで異なるターゲットフレームワークに異なる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#バージョンが使用されます。詳細については、ビルドのカスタマイズに関する記事を参照してください


8

.Net Core 3.0および3.1の最新バージョンをダウンロードしましたが、同じ問題が発生しました。私にとって、修正プログラムはVisual Studio 2019の最新バージョン(バージョン16.4.2)をダウンロードするように見えました。

これによりコンピュータも再起動し、エラーは解消しました。


これはVS2019のバージョン番号ではなく、16.xyのように見えます。
Hans Passant

4.7.03056は.NET Frameworkバージョンであり、最新のVSバージョンは現在16.4.4
Alex
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.