Options du compilateur C# pour les règles de fonctionnalité de langage

Les options suivantes contrôlent la façon dont le compilateur interprète les fonctionnalités de langage. la nouvelle syntaxe de MSBuild est indiquée en gras. L’ancienne syntaxe de csc.exe est indiquée dans code style .

  • CheckForOverflowUnderflow / -checked : générer des contrôles de dépassement de capacité.
  • AllowUnsafeBlocks / -unsafe : autoriser le code’unsafe'.
  • DefineConstants / -define : définir des symboles de compilation conditionnelle.
  • Langversion / -langversion : spécifiez la version de langue telle que default (dernière version principale) ou latest (dernière version, y compris les versions mineures).
  • Nullable / -nullable : activer le contexte Nullable ou les avertissements Nullable.

CheckForOverflowUnderflow

L’option CheckForOverflowUnderflow spécifie si une instruction arithmétique sur les entiers qui produit une valeur en dehors de la plage du type de données provoque une exception au moment de l’exécution.

<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>

Une instruction arithmétique entière qui est dans la portée d’un checked unchecked mot clé ou n’est pas soumise à l’effet de l’option CheckForOverflowUnderflow . Si une instruction arithmétique entière qui ne se trouve pas dans la portée d’un checked unchecked mot clé ou produit une valeur en dehors de la plage du type de données, et que CheckForOverflowUnderflow est true , cette instruction provoque une exception au moment de l’exécution. Si CheckForOverflowUnderflow est false , cette instruction ne provoque pas d’exception au moment de l’exécution. La valeur par défaut de cette option est false ; la vérification de dépassement de capacité est désactivée.

AllowUnsafeBlocks

L’option du compilateur AllowUnsafeBlocks autorise la compilation du code qui utilise le mot clé unsafe . La valeur par défaut de cette option est false , ce qui signifie que le code unsafe n’est pas autorisé.

<AllowUnsafeBlocks>true</AllowUnsafeBlocks>

Pour plus d’informations sur le code unsafe, consultez Pointeurs et code unsafe.

DefineConstants

L’option DefineConstants définit les symboles dans tous les fichiers de code source de votre programme.

<DefineConstants>name;name2</DefineConstants>

Cette option spécifie les noms d’un ou de plusieurs symboles que vous souhaitez définir. L’option DefineConstants a le même effet que la directive de préprocesseur #define , sauf que l’option de compilateur est appliquée pour tous les fichiers du projet. Un symbole reste défini dans un fichier source jusqu’à ce qu’une directive #undef dans le fichier source en supprime la définition. Lorsque vous utilisez l' -define option, une #undef directive dans un fichier n’a aucun effet sur les autres fichiers de code source du projet. Vous pouvez utiliser les symboles créés par cette option avec #if, #else, #elif et #endif pour effectuer une compilation conditionnelle des fichiers sources. Le compilateur C# lui-même ne définit aucun symbole ni aucune macro que vous pouvez utiliser dans votre code source ; toutes les définitions de symbole doivent être définies par l’utilisateur.

Notes

La #define directive C# ne permet pas à un symbole de recevoir une valeur, comme dans les langages tels que C++. Par exemple, l’option #define ne peut pas être utilisée pour créer une macro ni définir une constante. Si vous devez définir une constante, utilisez une variable enum. Si vous souhaitez créer une macro de style C++, envisagez l’alternative que constituent les génériques. Comme les macros sont notoirement sujettes aux erreurs, C# n’autorise pas leur utilisation, mais fournit des solutions plus sûres.

LangVersion

Force le compilateur à accepter uniquement la syntaxe incluse dans la spécification choisie du langage C#.

<LangVersion>9.0</LangVersion>

Les valeurs suivantes sont valides :

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 (default) Le compilateur accepte la syntaxe de la dernière version principale publiée du compilateur.
10.0 Le compilateur accepte uniquement la syntaxe qui est incluse en C# 10 ou une partie antérieure.
9.0 Le compilateur accepte uniquement la syntaxe qui est incluse dans C# 9 ou une partie 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 qui est incluse dans la norme ISO/IEC 23270:2006 C# (2,0).
ISO-1 (ou 1) Le compilateur accepte uniquement la syntaxe qui est incluse dans la norme ISO/IEC 23270:2003 C# (1.0/1.2).

La version du langage par défaut dépend du framework cible de votre application et de la version installée du kit SDK ou de Visual Studio. Ces règles sont définies dans le contrôle de version du langage C#.

Les métadonnées référencées par votre application C# ne sont pas soumises à l’option de compilateur langversion .

Étant donné que chaque version du compilateur C# contient des extensions de la spécification du langage, langversion ne vous donne pas les fonctionnalités équivalentes d’une version antérieure du compilateur.

en outre, bien que les mises à jour de version C# coïncident généralement avec les versions majeures .NET Framework, la nouvelle syntaxe et les nouvelles fonctionnalités ne sont pas nécessairement liées à cette version de Framework spécifique. Alors que les nouvelles fonctionnalités nécessitent une nouvelle mise à jour du compilateur, publiée en même temps que la révision de C#, chaque fonctionnalité spécifique a ses propres exigences minimales relatives à l’API .NET ou au Common Language Runtime pour pouvoir s’exécuter sur des frameworks de bas niveau en incluant des packages NuGet ou d’autres bibliothèques.

Quel que soit le paramètre langversion que vous utilisez, utilisez la version actuelle du Common Language Runtime pour créer votre .exe ou .dll. Les assemblys friend et moduleassemblyname, qui fonctionnent sous -langversion : ISO-1, sont une exception.

Pour d’autres façons de spécifier la version du langage C#, consultez contrôle de version du langage c#.

Pour plus d'informations sur la façon de définir cette option du compilateur par programme, consultez LanguageVersion.

spécification du langage C#

Version Lien Description
C# 7.0 et versions ultérieures Actuellement non disponible
C# 6.0 Lien Spécification du langage C# version 6 - Ébauche non officielle : .NET Foundation
C# 5.0 Télécharger le PDF Norme ECMA-334 5e édition
C# 3.0 Télécharger DOC Spécification du langage C# version 3.0 : Microsoft Corporation
C# 2.0 Télécharger le PDF Norme ECMA-334 4e édition
C# 1.2 Télécharger DOC Spécification du langage C# version 1.2 : Microsoft Corporation
C# 1.0 Télécharger DOC Spécification du langage C# version 1.0 : Microsoft Corporation

Version minimale du kit de développement logiciel nécessaire pour prendre en charge toutes les fonctionnalités de langage

Le tableau suivant répertorie les versions minimales du kit de développement logiciel (SDK) avec le compilateur C# qui prend en charge la version de langue correspondante :

Version C# Version minimale du kit de développement logiciel
C# 10 Microsoft Visual Studio/build Tools 2022 ou le kit de développement logiciel (SDK) .net 6
C# 9.0 Microsoft Visual Studio/build Tools 2019, version 16,8 ou SDK .net 5
C# 8.0 Microsoft Visual Studio/build Tools 2019, version 16,3 ou .net Core 3,0 SDK
C# 7.3 Microsoft Visual Studio/Build Tools 2017, version 15.7
C# 7.2 Microsoft Visual Studio/Build Tools 2017, version 15.5
C# 7.1 Microsoft Visual Studio/Build Tools 2017, version 15.3
C# 7.0 Microsoft Visual Studio/Build Tools 2017
C# 6 Microsoft Visual Studio/Build Tools 2015
C# 5 Microsoft Visual Studio/Build Tools 2012 ou compilateur .NET Framework 4.5 groupé
C# 4 Microsoft Visual Studio/Build Tools 2010 ou compilateur .NET Framework 4.0 groupé
C# 3 Microsoft Visual Studio/Build Tools 2008 ou compilateur .NET Framework 3.5 groupé
C# 2 Microsoft Visual Studio/Build Tools 2005 ou compilateur .NET Framework 2.0 groupé
C# 1.0/1.2 Microsoft Visual Studio/build Tools .net 2002 ou regroupé .NET Framework 1,0 du compilateur

Nullable

L’option Nullable vous permet de spécifier le contexte Nullable. La valeur par défaut de cette option est disable .

<Nullable>enable</Nullable>

L’argument doit être,, enable disable warnings ou annotations . L' enable argument active le contexte Nullable. disableLa spécification de désactive le contexte Nullable. Lorsque vous fournissez l' warnings argument, le contexte d’avertissement Nullable est activé. Lorsque vous spécifiez l' annotations argument, le contexte d’annotation Nullable est activé.

Flow analyse est utilisée pour déduire la possibilité de valeur null des variables au sein du code exécutable. La possibilité de valeur null déduite d’une variable est indépendante de la possibilité de valeur null déclarée de la variable. Les appels de méthode sont analysés même lorsqu’ils sont omis de manière conditionnelle. Par exemple, Debug.Assert en mode release.

L’appel de méthodes annotées avec les attributs suivants affecte également l’analyse du workflow :

Important

Le contexte Nullable global ne s’applique pas aux fichiers de code générés. Indépendamment de ce paramètre, le contexte Nullable est désactivé pour tout fichier source marqué comme généré. Un fichier est marqué comme généré de quatre façons :

  1. Dans le fichier. editorconfig, spécifiez generated_code = true dans une section qui s’applique à ce fichier.
  2. Placez <auto-generated> ou <auto-generated/> dans un commentaire en haut du fichier. Il peut se trouver sur n’importe quelle ligne de ce commentaire, mais le bloc de commentaires doit être le premier élément du fichier.
  3. Démarrer le nom de fichier avec TemporaryGeneratedFile_
  4. Terminez le nom de fichier avec . Designer. cs, . generated. cs, . g. cs ou . g. i. cs.

Les générateurs peuvent s’abonner à l’aide de la #nullable directive de préprocesseur.