Partager via


Erreurs et avertissements de préprocesseur

Le compilateur génère les erreurs suivantes pour une utilisation incorrecte des directives de préprocesseur :

  • CS1024 : Directive de préprocesseur attendue
  • CS1025 : commentaire à une seule ligne ou fin de ligne attendu
  • CS1027 : directive #endif attendue
  • CS1028 : directive de préprocesseur inattendue
  • CS1029 : #error : 'text'
  • CS1030 : #warning : 'text'
  • CS1032 : Impossible de définir/annuler les symboles de préprocesseur après le premier jeton dans le fichier
  • CS1038 : directive #endregion attendue
  • CS1040 : Les directives de préprocesseur doivent apparaître comme premier caractère non blanc sur une ligne
  • CS1517 : expression de préprocesseur non valide
  • CS1560 : nom de fichier non valide spécifié pour la directive de préprocesseur. Le nom de fichier est trop long ou n’est pas un nom de fichier valide
  • CS1576 : Le numéro de ligne spécifié pour #line directive est manquant ou non valide
  • CS1578 : Nom de fichier, commentaire à ligne unique ou fin de ligne attendue
  • CS1633 : directive #pragma non reconnue
  • CS1634 : Désactivation ou restauration attendue
  • CS1635 : Impossible de restaurer l’avertissement « code d’avertissement », car il a été désactivé globalement
  • CS1691 : 'number' n’est pas un numéro d’avertissement valide
  • CS1692 : Nombre non valide
  • CS1694 : Nom de fichier non valide spécifié pour la directive de préprocesseur. Le nom de fichier est trop long ou n’est pas un nom de fichier valide
  • CS1695 : Syntaxe invalide pour #pragma checksum ; cela devrait être #pragma checksum « filename » « {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} » « XXXX... »
  • CS1696 : commentaire sur une seule ligne ou fin de ligne attendu
  • CS1709 : Nom de fichier spécifié pour la directive de préprocesseur est vide
  • CS7009 : Impossible d’utiliser #r après le premier jeton dans le fichier
  • CS7010 : Nom de fichier entre guillemets attendu
  • CS7011 : #r n’est autorisé que dans les scripts
  • CS8097 : #load n’est autorisé que dans les scripts
  • CS8098 : Impossible d’utiliser #load après le premier jeton dans le fichier
  • CS8938 : La valeur de directive #line est manquante ou hors limites
  • CS8939 : La position de fin de la directive #line doit être supérieure ou égale à la position de début
  • CS8996 : Les littéraux de chaîne brute ne sont pas autorisés dans les directives de préprocesseur
  • CS9028 : la directive d’étendue de #line nécessite de l’espace avant la première parenthèse, avant le décalage de caractère et avant le nom de fichier
  • CS9297 : #: les directives ne peuvent pas être après le premier jeton dans le fichier
  • CS9298 : #: les directives ne peuvent être utilisées que dans les programmes basés sur des fichiers (-features:FileBasedProgram)
  • CS9299 : #: les directives ne peuvent pas être postérieures à #if la directive
  • CS9314 : #! les directives ne peuvent être utilisées que dans des scripts ou des programmes basés sur des fichiers

Syntaxe de directive de préprocesseur non valide

  • CS1024 : Directive de préprocesseur attendue
  • CS1025 : commentaire sur une seule ligne ou fin de ligne attendue
  • CS1027 : directive #endif attendue
  • CS1028 : directive de préprocesseur inattendue
  • CS1038 : directive #endregion attendue
  • CS1040 : Les directives de préprocesseur doivent apparaître comme premier caractère non blanc sur une ligne
  • CS1517 : expression de préprocesseur non valide
  • CS1633 : directive #pragma non reconnue
  • CS1696 : commentaire sur une seule ligne ou fin de ligne prévu
  • CS8996 : Les littéraux de chaîne brute ne sont pas autorisés dans les directives de préprocesseur

Ces erreurs indiquent que vous avez utilisé la syntaxe non valide pour les directives de préprocesseur. Les causes courantes sont les suivantes :

  • Utilisation d’une directive non reconnue après # (CS1024, CS1633).
  • Inclusion de commentaires multilignes sur les lignes de directive (CS1025, CS1696).
  • Utilisation de directives dans des emplacements inattendus (CS1028).
  • Manque de directives de correspondance requises (CS1027, CS1038).
  • Ne pas définir ni retirer les symboles en tant que premier jeton du fichier (CS1032)
  • Ne pas placer la directive comme premier élément sur une ligne (CS1040).
  • Utilisation d’expressions non valides dans la compilation conditionnelle (CS1517).
  • Utilisation de littéraux de chaîne bruts dans les directives de préprocesseur (CS8996).

Exemple CS1024 - Directive de préprocesseur attendue :

#import System   // CS1024 - "import" is not a valid directive

Exemple CS1025 - Commentaire à ligne unique ou fin de ligne attendu :

#if true /* hello  
*/   // CS1025 - multiline comment not allowed
#endif

Exemple CS1027 : directive #endif attendue :

#if true   // CS1027 - missing #endif
class Test { }

Exemple CS1028 - Directive de préprocesseur inattendue :

#endif   // CS1028 - no matching #if

Exemple CS1032 : #define et #undef les directives de préprocesseur doivent apparaître avant d’autres jetons :

/* Comment */ 
#define X   // CS1032 - directive not first token in file

Exemple CS1038 - directive #endregion attendue :

#region testing
class Test { }
// CS1038 - missing #endregion

Exemple CS1040 : les directives de préprocesseur doivent apparaître comme premier caractère non blanc :

/* Comment */ #define X   // CS1040 - directive not first on line

Exemple CS1517 - Expression de préprocesseur non valide :

#if 1           // CS1517 - numeric literals not allowed
#endif
#if ~symbol     // CS1517 - bitwise operators not allowed  
#endif

Exemple CS1633 - Directive #pragma non reconnue :

#pragma unknown  // CS1633 - "unknown" is not a valid pragma

Exemple CS8996 : les littéraux de chaîne bruts ne sont pas autorisés dans les directives de préprocesseur :

// CS8996.cs
#pragma checksum """raw_string""" "{406EA660-64CF-4C82-B6F0-42D48172A799}" "hash"  // CS8996
class Test { }

Pour corriger cette erreur, utilisez un littéral de texte standard :

#pragma checksum "filename.cs" "{406EA660-64CF-4C82-B6F0-42D48172A799}" "hash"  // OK
class Test { }

Pour corriger ces erreurs, vérifiez que vos directives de préprocesseur suivent les règles de syntaxe correctes décrites dans la documentation des directives de préprocesseur.

erreurs de directive #error et #warning

  • CS1029 : #error : 'text'
  • CS1030 : #warning : 'text'
  • CS1634 : Désactivation ou restauration attendue
  • CS1635 : Impossible de restaurer l’avertissement « code d’avertissement », car il a été désactivé globalement
  • CS1691 : 'number' n’est pas un numéro d’avertissement valide
  • CS1692 : Nombre non valide

Ces erreurs se produisent lorsque le compilateur traite #error, #warninget #pragma warning les directives. Ces directives vous permettent de générer des messages d’erreur et d’avertissement personnalisés lors de la compilation et du comportement d’avertissement de contrôle.

CS1029 affiche le texte d’une erreur définie avec la #error directive :

// CS1029.cs
class Sample
{
   static void Main()
   {
      #error Let's give an error here   // CS1029
   }
}

La compilation produit la sortie suivante :

example.cs(9,8): error CS1029: #error: 'Let's give an error here   // CS1029  '

CS1030 affiche le texte d’un avertissement défini avec la #warning directive :

// CS1030.cs
class Sample
{
   static void Main()
   {
      #warning Let's give a warning here
   }
}

La compilation produit la sortie suivante :

example.cs(6,16): warning CS1030: #warning: 'Let's give a warning here'

CS1634 se produit lorsqu’une #pragma warning clause est mal formée, par exemple lorsque la désactivation ou la restauration est omise :

// CS1634.cs
// compile with: /W:1

#pragma warning   // CS1634
// Try this instead:
// #pragma warning disable 0219

class MyClass
{
  public static void Main()
  {
  }
}

CS1635 se produit lorsque vous utilisez l’option de ligne de commande ou le /nowarn paramètre de projet pour désactiver un avertissement globalement, mais que vous utilisez #pragma warning restore pour tenter de restaurer cet avertissement :

// CS1635.cs
// compile with: /w:1 /nowarn:162

enum MyEnum {one=1,two=2,three=3};

class MyClass
{
    public static void Main()
    {
#pragma warning disable 162

    if (MyEnum.three == MyEnum.two)
        System.Console.WriteLine("Duplicate");

#pragma warning restore 162  // CS1635
    }
}

CS1691 se produit lorsqu’un nombre passé à la #pragma warning directive n’est pas un numéro d’avertissement valide :

// CS1691.cs
public class C
{
    int i = 1;
    public static void Main()
    {
        C myC = new C();
#pragma warning disable 151  // CS1691
// Try the following line instead:
// #pragma warning disable 1645
        myC.i++;
#pragma warning restore 151  // CS1691
// Try the following line instead:
// #pragma warning restore 1645
    }
}

CS1692 se produit lorsqu’un nombre de directives de préprocesseur comme #pragma et #line n’est pas valide, car il est trop grand, dans un format incorrect ou contient des caractères non valides :

// CS1692.cs

#pragma warning disable a  // CS1692
// Try this instead:
// #pragma warning disable 1691

class A
{
    static void Main()
    {
    }
}

Ces directives sont utiles pour les scénarios de compilation conditionnelle dans lesquels vous souhaitez alerter les développeurs sur des conditions spécifiques dans le code ou contrôler les avertissements affichés pendant la compilation. Pour plus d’informations sur l’utilisation de ces directives, consultez la documentation des directives de préprocesseur et #pragma avertissement.

#line et erreurs de directive de fichier

  • CS1560 : nom de fichier non valide spécifié pour la directive de préprocesseur. Le nom de fichier est trop long ou n’est pas un nom de fichier valide
  • CS1576 : Le numéro de ligne spécifié pour #line directive est manquant ou non valide
  • CS1578 : Nom de fichier, commentaire à ligne unique ou fin de ligne attendue
  • CS1694 : Nom de fichier non valide spécifié pour la directive de préprocesseur. Le nom de fichier est trop long ou n’est pas un nom de fichier valide
  • CS1695 : Syntaxe de #pragma checksum non valide ; doit être #pragma checksum « filename » « {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} » « XXXX... »
  • CS1709 : Nom de fichier spécifié pour la directive de préprocesseur est vide
  • CS8938 : La valeur de directive #line est manquante ou hors limites
  • CS8939 : La position de fin de la directive #line doit être supérieure ou égale à la position de début
  • CS9028 : la directive d’étendue #line nécessite de l’espace avant la première parenthèse, avant le décalage de caractère et avant le nom de fichier

Ces erreurs indiquent une utilisation incorrecte des directives de préprocesseur liées à la #line directive ou aux fichiers. Les causes courantes sont les suivantes :

  • Noms de fichiers non valides ou manquants (CS1560, CS1694, CS1709).
  • Format ou valeurs de numéro de ligne incorrects (CS1576, CS8938, CS8939).
  • Syntaxe appropriée manquante pour les noms de fichiers et les commentaires (CS1578).
  • Syntaxe mal formée #pragma checksum (CS1695).
  • Espacement incorrect dans les directives #line d’étendue (CS9028).

Exemple CS1560/CS1694 - Nom de fichier non valide spécifié :

#line 100 "MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890.txt"   // CS1560/CS1694 - filename too long

Exemple CS1576 - Numéro de ligne manquant ou non valide :

#line "abc.sc"         // CS1576 - missing line number
#line abc "file.cs"    // CS1576 - invalid line number format

Exemple CS1578 - Nom de fichier, commentaire ou fin de ligne attendu :

#line 101 abc.cs   // CS1578 - filename not quoted

Exemple CS1695 - Syntaxe de somme de contrôle #pragma non valide :

#pragma checksum "12345"  // CS1695 - missing GUID and checksum

Exemple CS1709 - Nom de fichier vide :

#pragma checksum "" "{406EA660-64CF-4C82-B6F0-42D48172A799}" ""  // CS1709 - empty filename

Exemple CS8938 : la valeur de la directive #line est manquante ou hors de portée :

#line   // CS8938 - missing value
#line 0  // CS8938 - out of range (must be 1-16,707,566)

Exemple CS8939 : erreur de position de fin #line :

#line (1, 10) - (1, 5) "file.cs"  // CS8939 - end column < start column

Exemple CS9028 - #ligne directif de portée d'espacement :

#line(1, 1) - (1, 10)"file.cs"  // CS9028 - missing spaces

Pour corriger ces erreurs, assurez-vous que vos #line directives et directives de préprocesseur liées aux fichiers suivent la syntaxe correcte, comme décrit dans la documentation des directives de préprocesseur.

Utilisation incorrecte des directives d’applications basées sur des fichiers

  • CS9297 : #: les directives ne peuvent pas suivre le premier jeton dans le fichier
  • CS9298 : #: les directives ne peuvent être utilisées que dans les programmes basés sur des fichiers (-features:FileBasedProgram)
  • CS9299 : les directives #: ne peuvent pas être après la directive #if
  • CS9314 : #! les directives ne peuvent être utilisées que dans des scripts ou des programmes basés sur des fichiers

Ces erreurs indiquent que vous avez utilisé les #: directives pour une application basée sur des fichiers de manière incorrecte. Vous pouvez en savoir plus sur la syntaxe de ces directives dans l’article sur les directives de préprocesseur dans la section sur les applications basées sur des fichiers. Vous pouvez également explorer les applications basées sur des fichiers en suivant le didacticiel sur les applications basées sur des fichiers.

Le fichier contient des directives script.cs

Les erreurs suivantes indiquent script.cs syntaxe dans un fichier C# compilé :

  • CS7009 : Impossible d’utiliser #r après le premier jeton dans le fichier
  • CS7010 : Nom de fichier entre guillemets attendu
  • CS7011 : #r n’est autorisé que dans les scripts
  • CS8097 : #load n’est autorisé que dans les scripts

Ces directives ne sont pas prises en charge dans C#compilé. Vous devez les supprimer ou utiliser script.cs.