Gestion des versions du langage C#

Le compilateur C# le plus récent détermine une version du langage par défaut en fonction du ou des frameworks cibles de votre projet. Visual Studio ne fournit pas d’interface utilisateur pour modifier la valeur, mais vous pouvez la changer en modifiant le fichier csproj. Le choix par défaut garantit que vous utilisez la dernière version de langage compatible avec votre framework cible. Vous bénéficiez d’un accès aux dernières fonctionnalités de langage compatibles avec la cible de votre projet. Ce choix par défaut garantit également que vous n’utilisez pas de langage qui nécessite des types ou un comportement d’exécution non disponibles dans votre framework cible. Le choix d’une version de langage plus récente que la version par défaut peut entraîner des erreurs de compilation et d’exécution difficiles à diagnostiquer.

C# 12 est pris en charge uniquement sur .NET 8 et les versions plus récentes. C# 11 est pris en charge uniquement sur .NET 7 et les versions plus récentes. C# 10 est pris en charge uniquement sur .NET 6 et les versions plus récentes.

Consultez la page de compatibilité de la plateforme Visual Studio pour plus d’informations sur les versions de .NET prises en charge par les versions de Visual Studio. Consultez la page de compatibilité de la plateforme Visual Studio pour Mac pour plus d’informations sur les versions de .NET prises en charge par les versions de Visual Studio pour Mac. Consultez la page Mono dédiée à C# pour connaître la compatibilité de Mono avec les versions de C#.

Valeurs par défaut

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

Cible Version Version du langage C# par défaut
.NET 8.x C# 12
.NET 7.x C# 11
.NET 6.x C# 10
.NET 5.x C# 9.0
.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

Si votre projet cible un framework preview qui a une version linguistique de prévisualisation correspondante, la version linguistique utilisée est la version linguistique de prévisualisation. Vous utilisez les fonctionnalités les plus récentes avec cette préversion dans n’importe quel environnement, sans que cela affecte les projets qui ciblent une version .NET Core publiée.

Important

Le nouveau modèle de projet pour Visual Studio 2017 a ajouté une entrée <LangVersion>latest</LangVersion> aux nouveaux fichiers projet. Si vous mettez à niveau l version cible de .Net Framework pour ces projets, le <LangVersion> paramètre peut remplacer la valeur par défaut de la nouvelle version cible de .Net Framework. Veillez à supprimer le <LangVersion>latest</LangVersion> de votre fichier projet pour vous assurer que votre projet utilise la version du compilateur recommandée pour votre version cible de .Net Framework. Vous pouvez mettre à jour le framework cible pour accéder aux fonctionnalités de langage plus récentes.

Remplacez les valeurs par défaut

Si vous devez spécifier votre version C# explicitement, vous pouvez le faire de plusieurs façons :

Conseil

Vous pouvez voir la version du langage dans Visual Studio dans la page des propriétés du projet. Sous l’onglet Build, le volet Avancé affiche la version sélectionnée.

Pour savoir quelle version de langage vous utilisez actuellement, placez #error version (en respectant la casse) dans votre code. En conséquence, le compilateur signale une erreur de compilateur CS8304 avec un message contenant la version du compilateur utilisée et la version de langage sélectionnée actuelle. Pour plus d’informations, consultez #error (référence C#).

Modifier le fichier projet

Vous pouvez définir la version du langage dans votre fichier projet. Par exemple, si vous souhaitez accéder explicitement aux fonctionnalités d’évaluation, ajoutez un élément comme suit :

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

La valeur preview utilise la dernière préversion disponible du langage C# que prend en charge votre compilateur.

Configurer plusieurs projets

Pour configurer plusieurs projets, vous pouvez créer un fichier Directory.Build.props, généralement dans le répertoire de votre solution, qui contient le <LangVersion> élément. Ajoutez le paramètre suivant au fichier Directory.Build.props :

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

Les builds de tous les sous-répertoires du répertoire contenant ce fichier vont utiliser désormais la préversion de C#. Pour plus d’informations, consultez Personnaliser votre build.

Informations de référence sur la version du langage C#

Le tableau suivant montre toutes les versions actuelles du langage C#. Les compilateurs plus anciens peuvent ne pas comprendre chaque valeur. Si vous installez le dernier SDK .NET, vous avez accès à tous les éléments répertoriés.

Valeur Signification
preview Le compilateur accepte toute la syntaxe de langage valide de la dernière préversion.
latest Le compilateur accepte la syntaxe de la dernière version publiée du compilateur (versions mineures incluses).
latestMajor
ou default
Le compilateur accepte la syntaxe de la dernière version principale publiée du compilateur.
12.0 Le compilateur accepte uniquement la syntaxe incluse dans C# 12 ou inférieur.
11.0 Le compilateur accepte uniquement la syntaxe incluse dans C# 11 ou une version antérieure.
10.0 Le compilateur accepte uniquement la syntaxe incluse dans C# 10 ou une version antérieure.
9.0 Le compilateur accepte uniquement la syntaxe incluse dans C# 9 ou une version antérieure.
8.0 Le compilateur accepte uniquement la syntaxe incluse dans C# 8.0 ou une version antérieure.
7.3 Le compilateur accepte uniquement la syntaxe incluse dans C# 7.3 ou une version antérieure.
7.2 Le compilateur accepte uniquement la syntaxe incluse dans C# 7.2 ou une version antérieure.
7.1 Le compilateur accepte uniquement la syntaxe incluse dans C# 7.1 ou une version antérieure.
7 Le compilateur accepte uniquement la syntaxe incluse dans C# 7.0 ou une version antérieure.
6 Le compilateur accepte uniquement la syntaxe incluse dans C# 6.0 ou une version antérieure.
5 Le compilateur accepte uniquement la syntaxe incluse dans C# 5.0 ou une version antérieure.
4 Le compilateur accepte uniquement la syntaxe incluse dans C# 4.0 ou une version antérieure.
3 Le compilateur accepte uniquement la syntaxe incluse dans C# 3.0 ou une version antérieure.
ISO-2
ou 2
Le compilateur accepte uniquement la syntaxe incluse dans ISO/IEC 23270:2006 C# (2.0)
ISO-1
ou 1
Le compilateur accepte uniquement la syntaxe incluse dans ISO/IEC 23270:2003 C# (1.0/1.2)

Remarque

Spécifier LangVersionavec la valeur default est différent d’omettre l’option LangVersion. Spécifier default utilise la version du langage pris en charge par le compilateur la plus récente, sans tenir compte de la version cible de .Net Framework. Par exemple, générer un projet qui cible .NET 6 depuis la version actuelle de Visual Studio 2022 utilise C# 10 si LangVersion n’est pas spécifié, mais utilise C# 11 si LangVersion est défini sur default.