Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
- CS8301 : Nom non valide pour un symbole de prétraitement ; 'nom de symbole' n’est pas un identificateur valide
- 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 applications basées sur des fichiers (-features:FileBasedProgram) -
CS9299 :
#:les directives ne peuvent pas être postérieures à#ifla directive -
CS9314 :
#!les directives ne peuvent être utilisées que dans des scripts ou des applications basées sur des fichiers - CS9378 : '# !' doit être les premiers caractères de la première ligne du fichier
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
- 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
- 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).
- Placement d’une directive
#defineou#undefaprès le premier jeton dans le 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 sur une seule ligne ou fin de ligne attendue :
#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 :
class Test { }
#define X // CS1032 - directive appears after the first token
Pour corriger cette erreur, placez toutes les directives #define et #undef avant le premier jeton du fichier :
#define X
#undef Y
class Test { }
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 chaîne 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.
Noms de symboles de préprocesseur non valides
- CS8301 : Nom non valide pour un symbole de prétraitement ; 'nom de symbole' n’est pas un identificateur valide
Lorsque vous créez CSharpParseOptions par programmation, fournissez chaque symbole de compilation conditionnelle en tant que nom en forme d’identificateur. Le premier caractère doit être valide au début d’un identificateur C#, et les caractères restants doivent être des caractères d’identificateur valides. Roslyn accepte également le texte du mot clé comme nom de symbole, mais n’ajoute pas de @ préfixe. N’incluez pas d’espace blanc, de ponctuation telle que . ou -, d’une affectation telle que FEATURE=1, ou d’une expression conditionnelle complète.
Un symbole de prétraitement enregistre uniquement si son nom est défini. Elle ne stocke pas de valeur. Les noms non valides fournis par le biais de la propriété de projet DefineConstants ou de l’option -define du compilateur produisent plutôt CS2029 ; consultez DefineConstants.
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 : 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 non valide de #pragma checksum ; 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 plage.
- 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 de #line nécessite de l’espace avant la première parenthèse, avant le décalage de caractère et avant le nom du 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 d’étendue
#line(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 attendue :
#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 de #line :
#line (1, 10) - (1, 5) "file.cs" // CS8939 - end column < start column
Exemple CS9028 - Espacement de la directive #line span :
#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 applications basées 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 applications basées sur des fichiers - CS9378 : '# !' doit être les premiers caractères de la première ligne du fichier
Ces erreurs indiquent que vous avez mal utilisé les directives #! ou #:. Pour en savoir plus sur la syntaxe de ces directives, consultez 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 tutoriel sur les applications basées sur des fichiers.
Un shebang (#!) sélectionne l’exécutable pour un script ou une application basée sur un fichier. Placez-le au premier caractère de la première ligne, avant tout espace blanc, commentaires ou lignes vides (CS9378) ; consultez les instructions de directive sur l’application basée sur des fichiers.
Le fichier contient des directives script.cs
Les erreurs suivantes indiquent une utilisation ou un positionnement incorrects des directives de script C# :
- 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
Dans un script C# (.csx), une directive #load placée après un jeton génère CS8098 :
System.Console.WriteLine("This is the first token.");
#load "helpers.csx" // CS8098
Pour corriger CS8098, déplacez chaque #load directive avant chaque jeton du script :
#load "helpers.csx"
System.Console.WriteLine("The directive precedes the first token.");
Dans un fichier source C# standard (.cs), #load n’est pas autorisé. Cette condition connexe produit CS8097, pas CS8098. Supprimez #load des fichiers sources standard.