La funzione "utilizzo delle dichiarazioni" non è disponibile in C # 7.3. Utilizzare la lingua versione 8.0 o successiva - Errore su un computer ma funziona su un altro


24

Quando si utilizza Visual Studio Enterprise 16.3.7su due macchine separate, una si costruisce bene e l'altra macchina genera l'errore:

La funzione "utilizzo delle dichiarazioni" non è disponibile in C # 7.3. Utilizzare la lingua versione 8.0 o successiva.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Questo può essere facilmente risolto sulla macchina che lavora nessuno impostando LangVersionin .csprojcome suggerito qui https://stackoverflow.com/a/48085575/3850405 o lasciare che Visual Studio risolvere automaticamente come la schermata di stampa di cui sopra.

<LangVersion>8.0</LangVersion>

Quello che non riesco a capire è perché una macchina si costruisce bene senza questa linea .csproje l'altra macchina ne ha bisogno?


Se si verifica un errore del genere, significa che non è un progetto C # 8 o si utilizza una versione di Resharper con un bug di analisi
Panagiotis Kanavos,

Che cos'è TargetFramework e LangVersion nel tuo csproj?
Panagiotis Kanavos,

@PanagiotisKanavos Sì, ma il progetto si basa su una macchina e non sull'altra - questo è ciò che non capisco. ReSharper non è utilizzato.
Ogglas,

Ciò potrebbe significare che l'SDK 3.0 non è presente su un computer. Cosa dotnet --list-sdksmostra?
Panagiotis Kanavos,

@PanagiotisKanavos Framework di destinazione .NET Framework 4.6.1e LangVersionnon impostato.
Ogglas,

Risposte:


20

Ho ricevuto lo stesso errore, ma avevo semplicemente dimenticato di includere il file

<LangVersion>8.0</LangVersion>

attributo in TUTTI i file .csproj nella soluzione. Quella che segue è la mia attuale configurazione di c # 8:

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

Ho trovato i seguenti documenti per essere i più utili durante la migrazione dal core 2.2 al 3.x:

MSDN 2.2 -> 3.0

MSDN 3.0 -> 3.1


2
Puoi usare <LangVersion>latest</LangVersion>invece di<LangVersion>8.0</LangVersion>
Eliahu Aaron il

1
Penso che il primo link MSDN 2.2 -> 3.0sia destinato al seguente link: docs.microsoft.com/en-us/aspnet/core/migration/22-to-30 Ho provato a modificare la risposta per modificarla, ma "suggerito modifica coda è pieno ", quindi pubblicheremo qui invece.
ahillier88,


11

Ciò può essere dovuto al fatto che il compilatore utilizza di default diverse versioni del linguaggio C # per diversi frame di destinazione.

Per sovrascrivere il linguaggio C # predefinito, aggiungi al file di progetto (come suggerito nella domanda):

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

o:

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

Vedere linguaggio C # controllo delle versioni per le versioni # lingua predefinita C per i diversi quadri di riferimento e come selezionare manualmente la versione linguaggio C #.

Vedi anche la risposta di overflow dello stack C # 8 supporta .NET Framework? per ulteriori informazioni su questo argomento.


Ecco parte dell'articolo di versioning del linguaggio C # :

Versioning in linguaggio C #

Il compilatore C # più recente determina una versione della lingua predefinita in base al framework o ai framework di destinazione del progetto. Questo perché il linguaggio C # può avere funzionalità che si basano su tipi o componenti di runtime che non sono disponibili in ogni implementazione .NET. Ciò garantisce anche che, per qualsiasi obiettivo su cui si basa il progetto, si ottenga la versione linguistica compatibile più alta per impostazione predefinita.

Le regole in questo articolo si applicano al compilatore fornito con Visual Studio 2019 o .NET Core 3.0 SDK. I compilatori C # che fanno parte dell'installazione di Visual Studio 2017 o delle versioni precedenti di .NET Core SDK hanno come target C # 7.0 per impostazione predefinita.

Defaults

Il compilatore determina un valore predefinito in base a queste regole:

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

Sostituisci un valore predefinito

Se devi specificare esplicitamente la tua versione C #, puoi farlo in diversi modi:

  • Modifica manualmente il tuo file di progetto.
  • Imposta la versione della lingua per più progetti in una sottodirectory.
  • Configurare l'opzione del compilatore -langversion.

Modifica il file di progetto

È possibile impostare la versione della lingua nel file di progetto. Ad esempio, se si desidera esplicitamente l'accesso alle funzionalità di anteprima, aggiungere un elemento come questo:

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

Il valore previewutilizza l'ultima versione disponibile del linguaggio di anteprima C # supportata dal compilatore.

Configura più progetti

Per configurare più progetti, è possibile creare un file Directory.Build.props che contiene l' <LangVersion>elemento. In genere lo fai nella directory della soluzione. Aggiungere quanto segue a un file Directory.Build.props nella directory della soluzione:

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

Ora, i build in ogni sottodirectory della directory contenente quel file utilizzeranno la versione di anteprima C #. Per ulteriori informazioni, consulta l'articolo su Personalizza la tua build .


8

Ho scaricato l'ultima versione di .Net Core 3.0 e 3.1 e ho avuto lo stesso problema. Per me, la correzione sembrava scaricare l'ultimo aggiornamento per Visual Studio 2019 (alla versione 16.4.2).

Anche questo ha riavviato il mio computer e l'errore è scomparso.


Quello non è un numero di versione VS2019, sembrano 16.xy Usa Aiuto> Informazioni.
Hans Passant,

4.7.03056 è una versione di .NET Framework, l'ultima versione di VS attualmente è 16.4.4
Alex
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.