Die Funktion 'Verwenden von Deklarationen' ist in C # 7.3 nicht verfügbar. Bitte verwenden Sie die Sprachversion 8.0 oder höher - Fehler auf einem Computer, funktioniert aber auf einem anderen

24

Bei Verwendung Visual Studio Enterprise 16.3.7auf zwei separaten Computern funktioniert einer einwandfrei und der andere Computer gibt den Fehler aus:

Die Funktion 'Verwenden von Deklarationen' ist in C # 7.3 nicht verfügbar. Bitte verwenden Sie die Sprachversion 8.0 oder höher.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Dies kann leicht auf der keine Bearbeitungsmaschine gelöst werden , indem LangVersionin .csprojwie hier vorgeschlagen https://stackoverflow.com/a/48085575/3850405 oder lassen Sie Visual Studio automatisch reparieren wie das Druckbild oben.

<LangVersion>8.0</LangVersion>

Was ich nicht verstehen kann ist, warum eine Maschine ohne diese Zeile gut baut .csprojund die andere Maschine sie benötigt?

Ogglas
quelle
Wenn Sie einen solchen Fehler erhalten, bedeutet dies, dass es sich nicht um ein C # 8-Projekt handelt oder dass Sie eine Resharper-Version mit einem Analysefehler verwenden
Panagiotis Kanavos
Was ist das TargetFramework und die LangVersion in Ihrem csproj?
Panagiotis Kanavos
@PanagiotisKanavos Ja, aber das Projekt baut auf einer Maschine und nicht auf der anderen auf - das verstehe ich nicht. ReSharper wird nicht verwendet.
Ogglas
Dies kann bedeuten, dass das 3.0 SDK auf einem Computer fehlt. Was dotnet --list-sdkszeigt?
Panagiotis Kanavos
@PanagiotisKanavos Ziel-Framework .NET Framework 4.6.1und LangVersionist nicht festgelegt.
Ogglas

Antworten:

20

Ich habe den gleichen Fehler erhalten, aber ich hatte einfach vergessen, das einzuschließen

<LangVersion>8.0</LangVersion>

Attribut in ALL den CSPROJ Dateien in der Lösung. Das Folgende ist mein aktuelles c # 8-Setup:

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

Ich fand die folgenden Dokumente am hilfreichsten bei der Migration von Core 2.2 auf 3.x:

MSDN 2.2 -> 3.0

MSDN 3.0 -> 3.1

James LoForti
quelle
2
Sie können <LangVersion>latest</LangVersion>anstelle von<LangVersion>8.0</LangVersion>
Eliahu Aaron
1
Ich denke, der erste Link MSDN 2.2 -> 3.0soll auf Folgendes verweisen : docs.microsoft.com/en-us/aspnet/core/migration/22-to-30 Ich habe versucht, die Antwort zu bearbeiten, um sie zu ändern, aber "schlug eine Bearbeitungswarteschlange vor ist voll ", werde also stattdessen hier posten.
ahillier88
10

Dies kann daran liegen, dass der Compiler standardmäßig verschiedene C # -Sprachenversionen für verschiedene Target Frameworks verwendet.

Um die Standardsprache C # zu überschreiben, fügen Sie sie zur Projektdatei hinzu (wie in Frage vorgeschlagen):

<PropertyGroup>
   <LangVersion>8.0</LangVersion>
</PropertyGroup>

oder:

<PropertyGroup>
   <LangVersion>latest</LangVersion>
</PropertyGroup>

Unter C # -Sprachenversionierung finden Sie die Standardversionen für C # -Sprachen für die verschiedenen Zielframeworks und die manuelle Auswahl der C # -Sprachenversion.

Siehe auch die Antwort zum Stapelüberlauf. Unterstützt C # 8 .NET Framework? Weitere Informationen zu diesem Thema.


Hier ist ein Teil des Artikels zur Versionierung der C # -Sprache :

Versionierung der C # -Sprache

Der neueste C # -Compiler ermittelt eine Standard-Sprachversion basierend auf dem Zielframework oder den Frameworks Ihres Projekts. Dies liegt daran, dass die C # -Sprache möglicherweise Funktionen enthält, die auf Typen oder Laufzeitkomponenten beruhen, die nicht in jeder .NET-Implementierung verfügbar sind. Dies stellt auch sicher, dass Sie für jedes Ziel, für das Ihr Projekt erstellt wurde, standardmäßig die höchstkompatible Sprachversion erhalten.

Die Regeln in diesem Artikel gelten für den Compiler, der mit Visual Studio 2019 oder dem .NET Core 3.0 SDK geliefert wird. Die C # -Compiler, die Teil der Visual Studio 2017-Installation oder früherer .NET Core SDK-Versionen sind, zielen standardmäßig auf C # 7.0 ab.

Standardeinstellungen

Der Compiler bestimmt einen Standard basierend auf diesen Regeln:

--------------------------------------------------------
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
--------------------------------------------------------

Standard überschreiben

Wenn Sie Ihre C # -Version explizit angeben müssen, können Sie dies auf verschiedene Arten tun:

  • Bearbeiten Sie Ihre Projektdatei manuell.
  • Legen Sie die Sprachversion für mehrere Projekte in einem Unterverzeichnis fest.
  • Konfigurieren Sie die Compileroption -langversion.

Bearbeiten Sie die Projektdatei

Sie können die Sprachversion in Ihrer Projektdatei festlegen. Wenn Sie beispielsweise explizit auf Vorschaufunktionen zugreifen möchten, fügen Sie ein Element wie das folgende hinzu:

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

Der Wert previewverwendet die neueste verfügbare Vorschau-C # -Sprachenversion, die Ihr Compiler unterstützt.

Konfigurieren Sie mehrere Projekte

Um mehrere Projekte zu konfigurieren, können Sie eine Directory.Build.props- Datei erstellen , die das <LangVersion>Element enthält . Dies tun Sie normalerweise in Ihrem Lösungsverzeichnis. Fügen Sie einer Directory.Build.props- Datei in Ihrem Lösungsverzeichnis Folgendes hinzu :

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

Jetzt wird in jedem Unterverzeichnis des Verzeichnisses, das diese Datei enthält, die Vorschau-C # -Version verwendet. Weitere Informationen finden Sie im Artikel zum Anpassen Ihres Builds .

Eliahu Aaron
quelle
8

Ich habe die neueste Version von .Net Core 3.0 und 3.1 heruntergeladen und hatte das gleiche Problem. Für mich schien das Update das neueste Update für Visual Studio 2019 (auf Version 16.4.2) herunterzuladen.

Dadurch wurde auch mein Computer neu gestartet und der Fehler wurde behoben.

Curt
quelle
Dies ist keine VS2019-Versionsnummer. Sie sehen aus wie 16.xy. Hilfe verwenden> Info.
Hans Passant
4.7.03056 ist eine .NET Framework-Version, die letzte VS-Version ist derzeit 16.4.4
Alex