La fonctionnalité 'à l'aide de déclarations' n'est pas disponible dans C # 7.3. Veuillez utiliser la version linguistique 8.0 ou supérieure - Erreur sur une machine mais fonctionne sur une autre

24

Lors de l'utilisation Visual Studio Enterprise 16.3.7sur deux machines distinctes, l'une se déroule correctement et l'autre machine génère l'erreur:

La fonctionnalité «à l'aide de déclarations» n'est pas disponible dans C # 7.3. Veuillez utiliser la version linguistique 8.0 ou supérieure.

entrez la description de l'image ici

entrez la description de l'image ici

Cela peut facilement être résolu sur la machine de travail aucune en mettant LangVersionen .csprojcomme suggéré ici https://stackoverflow.com/a/48085575/3850405 ou laisser Visual Studio automatiquement comme fixer l'écran d'impression ci - dessus.

<LangVersion>8.0</LangVersion>

Ce que je ne peux pas comprendre, c'est pourquoi une machine se construit bien sans cette ligne .csprojet que l'autre machine en a besoin?

Ogglas
la source
Si vous obtenez une telle erreur, cela signifie que ce n'est pas un projet C # 8, ou que vous utilisez une version Resharper avec un bug d'analyse
Panagiotis Kanavos
Quel est le TargetFramework et LangVersion dans votre csproj?
Panagiotis Kanavos
@PanagiotisKanavos Oui mais le projet s'appuie sur une machine et non sur l'autre - c'est ce que je ne comprends pas. ReSharper n'est pas utilisé.
Ogglas
Cela pourrait signifier que le SDK 3.0 est manquant sur une machine. Que dotnet --list-sdksmontre-t-on?
Panagiotis Kanavos
@PanagiotisKanavos Framework cible .NET Framework 4.6.1et LangVersionn'est pas défini.
Ogglas

Réponses:

20

J'ai reçu la même erreur, mais j'avais simplement oublié d'inclure le

<LangVersion>8.0</LangVersion>

attribut dans TOUS les fichiers .csproj de la solution. Ce qui suit est ma configuration c # 8 actuelle:

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

J'ai trouvé que les documents suivants étaient les plus utiles lors de la migration du noyau 2.2 vers 3.x:

MSDN 2.2 -> 3.0

MSDN 3.0 -> 3.1

James LoForti
la source
2
Vous pouvez utiliser à la <LangVersion>latest</LangVersion>place de<LangVersion>8.0</LangVersion>
Eliahu Aaron
1
Je pense que le premier lien MSDN 2.2 -> 3.0est destiné à créer un lien vers ce qui suit: docs.microsoft.com/en-us/aspnet/core/migration/22-to-30 J'ai essayé de modifier la réponse pour la modifier, mais "suggéré la file d'attente de modification est plein ", donc je posterai ici à la place.
ahillier88
11

Cela peut être dû au fait que le compilateur utilise par défaut différentes versions du langage C # pour différents cadres cibles.

Pour remplacer le langage C # par défaut, ajoutez au fichier de projet (comme suggéré dans la question):

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

ou:

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

Voir Versionnage du langage C # pour les versions du langage C # par défaut pour les différents frameworks cibles et comment sélectionner manuellement la version du langage C #.

Voir aussi la réponse de débordement de pile. C # 8 prend-il en charge le .NET Framework? pour plus d'informations sur ce sujet.


Voici une partie de l' article de versioning en langage C # :

Versionnage du langage C #

Le dernier compilateur C # détermine une version de langage par défaut en fonction du cadre ou des cadres cibles de votre projet. Cela est dû au fait que le langage C # peut avoir des fonctionnalités qui dépendent de types ou de composants d'exécution qui ne sont pas disponibles dans chaque implémentation .NET. Cela garantit également que, quelle que soit la cible de votre projet, vous obtenez la version linguistique compatible la plus élevée par défaut.

Les règles de cet article s'appliquent au compilateur fourni avec Visual Studio 2019 ou le SDK .NET Core 3.0. Les compilateurs C # qui font partie de l'installation de Visual Studio 2017 ou des versions antérieures du SDK .NET Core ciblent C # 7.0 par défaut.

Valeurs par défaut

Le compilateur détermine une valeur par défaut en fonction de ces règles:

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

Remplacer une valeur par défaut

Si vous devez spécifier explicitement votre version C #, vous pouvez le faire de plusieurs manières:

  • Modifiez manuellement votre fichier de projet.
  • Définissez la version linguistique de plusieurs projets dans un sous-répertoire.
  • Configurez l'option du compilateur -langversion.

Modifier le fichier de projet

Vous pouvez définir la version linguistique dans votre fichier de projet. Par exemple, si vous souhaitez explicitement accéder aux fonctionnalités d'aperçu, ajoutez un élément comme celui-ci:

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

La valeur previewutilise la dernière version disponible en langage C # d'aperçu prise en charge par votre compilateur.

Configurer plusieurs projets

Pour configurer plusieurs projets, vous pouvez créer un fichier Directory.Build.props qui contient l' <LangVersion>élément. Vous le faites généralement dans votre répertoire de solutions. Ajoutez ce qui suit à un fichier Directory.Build.props dans le répertoire de votre solution:

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

Désormais, les builds dans chaque sous-répertoire du répertoire contenant ce fichier utiliseront la version C # de prévisualisation. Pour plus d'informations, consultez l'article sur Personnaliser votre build .

Eliahu Aaron
la source
8

J'ai téléchargé la dernière version de .Net Core 3.0 et 3.1 et j'ai eu le même problème. Pour moi, le correctif semblait télécharger la dernière mise à jour de Visual Studio 2019 (vers la version 16.4.2).

Cela a également redémarré mon ordinateur et l'erreur a disparu.

Sec
la source
Ce n'est pas un numéro de version VS2019, ils ressemblent à 16.xy Utilisez Aide> À propos.
Hans Passant
4.7.03056 est une version de .NET Framework, la dernière version VS est actuellement 16.4.4
Alex