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.
Cet article traite des erreurs suivantes du compilateur :
- CS0104: Erreur : « référence » est une référence ambiguë entre « identificateur » et « identificateur ».
- CS0116 : Erreur : un espace de noms ne peut pas contenir directement des membres tels que des champs, des méthodes ou des instructions.
- CS0138 : Erreur :une directive utilisant un espace de noms ne peut être appliquée qu’aux espaces de noms ; 'type' est un type et non un espace de noms.
- CS0430: Erreur : l’alias extern 'alias' n’a pas été spécifié dans une option /reference.
-
CS0431 : impossible d’utiliser l’alias 'identificateur' avec
::, car l’alias référence un type. Utilisez.à la place. - CS0432 : Erreur : alias 'identificateur' introuvable.
- CS0434: Erreur : l’espace de noms NamespaceName1 dans NamespaceName2 est en conflit avec le type TypeName1 dans NamespaceName3.
- CS0438: Erreur : le type 'type' dans 'module_1' est en conflit avec l’espace de noms 'namespace' dans 'module_2'.
- CS0439 : Erreur : une déclaration d’alias extern doit précéder tous les autres éléments définis dans l’espace de noms.
- CS0518 : Erreur : le type prédéfini 'type' n’est pas défini ou importé.
- CS0576 : Erreur : le namespace 'namespace' contient une définition en conflit avec l'alias 'identificateur'.
-
CS0687 : le qualificateur d’alias d’espace de noms
::est toujours résolu en type ou en espace de noms ; il est donc non conforme ici. Envisagez plutôt d’utiliser.à la place. - CS1022: Erreur : Définition de type ou d’espace de noms, ou fin de fichier attendue.
- CS1529 : Erreur : une clause d’utilisation doit précéder tous les autres éléments définis dans l’espace de noms, à l’exception des déclarations d’alias externes.
- CS1537 : Erreur : l’alias d’utilisation 'alias' est apparu précédemment dans cet espace de noms.
- CS1671 : Erreur : une déclaration d’espace de noms ne peut pas avoir de modificateurs ou d’attributs.
- CS1679 : Erreur : alias extern non valide pour « /reference » ; 'identificateur' n’est pas un identificateur valide.
- CS1680: Erreur : option d’alias de référence non valide : 'alias=' -- nom de fichier manquant.
- CS1681 : Erreur : Vous ne pouvez pas redéfinir l’alias extern global.
- CS1730: Erreur : les attributs assembly et module doivent précéder tous les autres éléments définis dans un fichier, à l’exception des clauses et des déclarations d’alias extern.
- CS2034: Erreur : une option /reference qui déclare un alias extern ne peut avoir qu’un seul nom de fichier. Pour spécifier plusieurs alias ou noms de fichiers, utilisez plusieurs options /reference.
- CS7000 : Erreur : utilisation inattendue d’un nom ayant un alias.
-
CS7007 : Erreur : une
using staticdirective ne peut être appliquée qu’aux types. Considérez plutôt uneusing namespacedirective. - CS7015 : Erreur : « alias extern » n’est pas valide dans ce contexte.
- CS7021 : Erreur : Impossible de déclarer l’espace de noms dans le code de script.
- CS8083 : Erreur : un nom qualifié d’alias n’est pas une expression.
- CS8085 : Erreur : une directive 'utilisation d’un élément statique' ne peut pas être utilisée pour déclarer un alias.
- CS8914 : Erreur : une directive d’utilisation globale ne peut pas être utilisée dans une déclaration d’espace de noms.
- CS8915 : Erreur : une directive d’utilisation globale doit précéder toutes les directives d’utilisation non globales.
- CS8954 : Erreur : le fichier source ne peut contenir qu’une seule déclaration d’espace de noms délimitée à un fichier.
- CS8955 : Erreur : le fichier source ne peut pas contenir à la fois les déclarations d’espace de noms de fichiers et normales.
- CS8956 : Erreur : l’espace de noms délimité au fichier doit précéder tous les autres membres d’un fichier.
-
CS9130 : Erreur : l’utilisation de l’alias ne peut pas être un type
ref. -
CS9131 : Erreur : seul un alias d’utilisation peut être
unsafe. - CS9132 : Erreur : l’utilisation de l’alias ne peut pas être un type référence pouvant accepter la valeur null.
-
CS9133 : Erreur : le modificateur
staticdoit précéder le modificateurunsafe. - CS9162 : le type n’est pas valide pour 'utilisation statique'. Seuls une classe, un struct, une interface, une énumération, un délégué ou un espace de noms peuvent être utilisés.
Et les avertissements du compilateur suivants :
- CS0105 : Avertissement : la directive d’utilisation pour 'espace de noms' est apparue précédemment dans cet espace de noms.
- CS0435 : Avertissement : l’espace de noms 'namespace' dans 'assembly' est en conflit avec le type importé 'type' dans 'assembly'. Utilisation de l’espace de noms défini dans « assembly ».
- CS0436 : Avertissement : Le type 'type' dans 'assembly' est en conflit avec le type importé 'type2' dans 'assembly'. Utilisation du type défini dans « assembly ».
- CS0437: Avertissement : Le type « type » dans « assembly2 » est en conflit avec l’espace de noms importé « namespace » dans « assembly1 ». Utilisation du type défini dans « assembly ».
-
CS0440 : Avertissement : la définition d’un alias nommé
globaln’est pas judicieuse dans la mesure oùglobal::fait toujours référence à l’espace de noms global et non à un alias. - CS8019 : Information : inutile d’utiliser la directive.
- CS8020 : Informations : alias extern inutilisé.
- CS8933 : Information : la directive d’utilisation apparaissait auparavant sous la forme d’une directive globale d’utilisation.
Ces erreurs et avertissements indiquent des problèmes liés aux using directives, aux déclarations d’espace de noms ou aux conflits d’affectation de noms entre les types et les espaces de noms. Les sections suivantes décrivent ces erreurs et expliquent comment les corriger.
Directive d’utilisation
Les erreurs suivantes concernent les using directives :
- CS0105 : La directive using pour « espace de noms » apparaît précédemment dans cet espace de noms.
- CS0430 : l’alias extern 'alias' n’a pas été spécifié dans une option /reference.
- CS0439 : une déclaration d’alias extern doit précéder tous les autres éléments définis dans l’espace de noms.
- CS1529 : Une clause using doit précéder tous les autres éléments définis dans l'espace de noms, à l'exception des déclarations d'alias externes.
- CS1679 : Alias extern non valide pour « /reference » ; 'identificateur' n’est pas un identificateur valide.
- CS1680 : Option d’alias de référence non valide : 'alias=' -- nom de fichier manquant.
- CS1681 : Vous ne pouvez pas redéfinir l’alias d’extern global.
- CS1730 : Les attributs assembly et module doivent précéder tous les autres éléments définis dans un fichier, à l’exception des clauses et des déclarations d’alias extern.
- CS2034 : Option /reference qui déclare un alias extern ne peut avoir qu’un seul nom de fichier. Pour spécifier plusieurs alias ou noms de fichiers, utilisez plusieurs options /reference.
- CS7015 : « alias extern » n’est pas valide dans ce contexte.
- CS8019 : Directive d’utilisation inutile.
- CS8020 : alias extern inutilisé.
- CS8933 : La directive using est précédemment apparue sous la forme d'un global using.
Consultez la directive using et la référence du langage alias externe pour les règles qui régissent ces diagnostics. Les correctifs potentiels sont les suivants :
- Déplacez toutes les directives
usingen haut du fichier ou en haut de la déclaration d’espace de noms. Le langage C# exige queusingles directives doivent précéder d’autres éléments dans un espace de noms (CS1529). - Déplacez toutes les déclarations
extern aliasavant toutes les directivesusing. Le langage exige que les alias externes soient fournis avant tous les autres éléments, y compris les directivesusing(CS0439, CS7015). - Déplacez tous les attributs au niveau de l'assembly et du module après les clauses
usinget les déclarationsextern alias, mais avant toutes les déclarations de type. Les attributs doivent suivre les directives, mais précéder les types (CS1730). - Vérifiez que chaque
extern aliasdéclaration de votre code source a un alias correspondant défini dans les options de référence de votre projet. Le compilateur ne peut pas résoudre un alias qui n’a pas été spécifié (CS0430). - Utilisez une option distincte
/referencepour chaque alias extern plutôt que de combiner plusieurs alias dans une seule option. Le compilateur nécessite un alias par option de référence (CS2034). - Vérifiez que l’alias dans votre
/referenceoption est un identificateur C# valide. L’alias doit suivre les règles d’affectation de noms d’identificateur (CS1679). Ajoutez un nom de fichier après le signe=dans votre option de référence d'alias. Le compilateur doit connaître l’assembly auquel l’alias fait référence (CS1680). - N’essayez pas de redéfinir l’alias
globalextern.globalest un alias prédéfini qui fait référence à toutes les références sans alias (CS1681). - Supprimez les directives dupliquées
using. Le compilateur avertit lorsque le même espace de noms est importé plusieurs fois (CS0105, CS8019, CS8933). - Supprimez les déclarations inutilisées
extern alias. Le compilateur émet un diagnostic lorsqu’un alias extern est déclaré, mais jamais référencé dans votre code (CS8020).
Utilisation d’une directive statique
Les erreurs suivantes concernent les using static directives :
- CS0138 : La directive 'using namespace' ne peut être appliquée qu’aux espaces de noms ; 'type' est un type, pas un espace de noms.
-
CS7007 : une
using staticdirective ne peut être appliquée qu’aux types. Considérez plutôt uneusing namespacedirective. -
CS9133 : le
staticmodificateur doit précéder leunsafemodificateur. - CS9162 : Le type n’est pas valide pour « utilisation statique ». Seules une classe, un struct, une interface, une énumération, un délégué ou un espace de noms peuvent être utilisés.
Consultez la référence de langage de la directive utilisant static pour les règles qui régissent ces diagnostics. Les correctifs potentiels sont les suivants :
- Ajoutez le
staticmodificateur lors de l’importation directe des membres d’un type, car l’omissionstaticindique au compilateur que vous importez un espace de noms plutôt qu’un type (CS0138). - Supprimez le modificateur lors de l’importation
staticd’un espace de noms, carusing staticil ne peut être appliqué qu’aux types, et non aux espaces de noms (CS7007). Vérifiez que la cible d’uneusing staticdirective est une classe, un struct, une interface, une énumération ou un délégué, car d’autres types ne sont pas des cibles valides pour les importations statiques (CS9162). - Placez le modificateur
staticavant le modificateurunsafelors de la combinaison des deux modificateurs, car la langue exige des modificateurs dans un ordre spécifique (CS9133).
Directive using globale
Les erreurs suivantes concernent les global using directives :
- CS8914 : Une directive d’utilisation globale ne peut pas être utilisée dans une déclaration d’espace de noms.
- CS8915 : une directive d’utilisation globale doit précéder toutes les directives d’utilisation non globales.
Consultez la référence globale du langage de directive à l’aide des règles qui régissent ces diagnostics. Les correctifs potentiels sont les suivants :
- Déplacez les directives
global usingen dehors de toute déclaration d’espace de noms pour les positionner au niveau du fichier, car les utilisations globales s'appliquent à l'échelle du projet et ne peuvent pas être restreintes à un espace de noms (CS8914). - Placez toutes les directives avant toutes les
global usingdirectives non globalesusingdans le fichier, car la langue exige que les directives globales précèdent les directives locales (CS8915). - Notez qu’une
static global usingdirective ne peut pas référencer un type local de fichier .
Espace de noms au niveau du fichier
Les erreurs suivantes concernent les espaces de noms délimités aux fichiers :
- CS8954 : Le fichier source ne peut contenir qu’une seule déclaration d’espace de noms délimitée à un fichier.
- CS8955 : Le fichier source ne peut pas contenir à la fois des déclarations d’espace de noms à portée de fichier et des déclarations normales d'espace de noms.
- CS8956 : l’espace de noms délimité au fichier doit précéder tous les autres membres d’un fichier.
Consultez la référence du langage espace de noms à l'échelle du fichier pour les règles qui régissent ces diagnostics. Les correctifs potentiels sont les suivants :
- Utilisez une seule déclaration d’espace de noms délimitée par fichier, car la langue autorise uniquement un espace de noms à étendue de fichier unique à définir l’espace de noms pour tous les types d’un fichier (CS8954).
- Choisissez d'utiliser des déclarations d'espace de noms à étendue de fichier ou de bloc dans un seul fichier, car le langage n'autorise pas le mélange des deux styles (CS8955).
- Déplacez la déclaration d’espace de noms au niveau du fichier avant les déclarations de type, car l’espace de noms doit être établi avant que les types soient déclarés (CS8956).
Qualificateur d’alias
Les erreurs suivantes concernent le qualificateur d’alias :
-
CS0431 : Impossible d’utiliser l’alias 'identifier' car
::l’alias fait référence à un type. Utilisez.à la place. - CS0432 : Alias 'identifiant' introuvable.
-
CS0440 : La définition d’un alias nommé
globaln’est pas conseillée, carglobal::il fait toujours référence à l’espace de noms global et non à un alias. -
CS0687 : Le qualificateur
::d’alias d’espace de noms se résout toujours en un type ou un espace de noms. Il est donc illégal ici. Envisagez plutôt d’utiliser.. - CS7000 : utilisation inattendue d’un nom alias.
- CS8083 : Un nom qualifié d’alias n’est pas une expression.
Consultez la référence du langage de qualificateur d’alias d’espace de noms pour les règles qui régissent ces diagnostics. Les correctifs potentiels sont les suivants :
- Remplacez l’opérateur
::par l’opérateur.lorsque vous accédez aux membres d’un alias de type, car le::qualificateur est valide uniquement pour les alias d’espace de noms, et non pour les alias de type (CS0431, CS0687). - Vérifiez que l’alias que vous référencez est déclaré avec une
usingdirective ouextern alias, car le compilateur ne peut pas résoudre un alias non défini (CS0432). - Utilisez le qualificateur d’alias uniquement dans les contextes où un nom de type ou d’espace de noms est attendu, car les noms qualifiés par alias ne sont pas valides en tant qu’expressions (CS7000, CS8083).
- Choisissez un autre nom pour votre alias au lieu de
global, carglobalest réservé pour faire référence à l’espace de noms global et ne peut pas être redéfini (CS0440).
Utilisation des restrictions d’alias
Les erreurs suivantes concernent les restrictions relatives à l’utilisation d’alias :
- CS0576 : l’espace de noms 'namespace' contient une définition en conflit avec l’alias 'identifier'.
- CS1537 : L’alias 'alias' utilisé est déjà apparu auparavant dans cet espace de noms.
- CS8085 : Une directive « using static » ne peut pas être utilisée pour déclarer un alias.
-
CS9130 : Un alias ne peut pas être utilisé comme un
reftype. -
CS9131 : Seul un alias d’utilisation peut être
unsafe. - CS9132 : L’utilisation de l’alias ne peut pas être un type de référence nullable.
Consultez la référence du langage utilisation de l'alias pour les règles régissant ces diagnostics. Les correctifs potentiels sont les suivants :
- Choisissez un nom unique pour votre alias qui n’est pas en conflit avec les noms de type ou d’espace de noms existants dans l’étendue, car le compilateur ne peut pas faire la distinction entre l’alias et la définition existante (CS0576).
- Utilisez chaque nom d’alias une seule fois dans un espace de noms, car les déclarations d’alias dupliquées créent une ambiguïté (CS1537).
- Supprimez le modificateur lors de la
staticdéclaration d’un alias, car les alias et les importations statiques sont mutuellement exclusifs : utilisez-leusing staticpour importer des membres ouusing Alias =pour créer un alias, mais pas les deux ensemble (CS8085).
À compter de C# 12, les restrictions suivantes s’appliquent à l’utilisation d’alias :
- N'utilisez pas les modificateurs
ref,inououtdans un alias using, car ces modificateurs de paramètres ne sont pas valides dans les contextes d'alias de type (CS9130). - Utilisez le
unsafemodificateur uniquement avec des alias qui référencent des types de pointeur ou avecusing staticdes directives, carunsafesans alias ou importation statique n’est pas autorisé (CS9131). - Utilisez un type de référence non nullable lors de la création d’un alias à un type de référence, car les types de référence nullables ne peuvent pas être alias directement (CS9132).
Déclarations d’espace de noms
Les erreurs suivantes concernent les règles de déclaration d’espace de noms :
- CS0116 : un espace de noms ne peut pas contenir directement des membres tels que des champs, des méthodes ou des instructions.
- CS1022 : Définition de type ou d’espace de noms, ou fin de fichier attendue.
- CS1671 : une déclaration d’espace de noms ne peut pas avoir de modificateurs ou d’attributs.
- CS7021 : Impossible de déclarer l’espace de noms dans le code de script.
Consultez le mot clé d’espace de noms et la structure générale d’une référence de langage de programme C# pour connaître les règles qui régissent ces diagnostics. Les correctifs potentiels sont les suivants :
- Vérifiez que toutes les méthodes, champs et propriétés sont déclarés à l’intérieur d’un type (classe, struct, enregistrement ou interface) plutôt que directement à l’intérieur d’un espace de noms, car les espaces de noms ne peuvent contenir que des déclarations de type, des espaces de noms imbriqués et
usingdes directives (CS0116). - Recherchez les accolades incompatibles dans votre fichier source, car une accolade fermante supplémentaire après une définition d’espace de noms ou de type génère une erreur lorsque le compilateur rencontre un contenu inattendu à la fin du fichier (CS1022).
- Supprimez les modificateurs d’accès ou les attributs des déclarations d’espace de noms, car les espaces de noms ne prennent pas en charge les modificateurs tels
publicouprivate, et les attributs ne peuvent pas être appliqués à eux (CS1671). - Déplacez les déclarations d’espace de noms hors des fichiers de script C# (
.csx) et dans les fichiers sources standard (.cs), car le code de script est évalué dans un contexte d’exécution unique qui ne prend pas en charge les déclarations d’espace de noms (CS7021).
Conflits de noms d'espace de noms et de type
Les erreurs et avertissements suivants concernent les conflits d’affectation de noms entre les espaces de noms et les types :
- CS0104 : 'reference' est une référence ambiguë entre 'identificateur' et 'identificateur'.
- CS0434 : l’espace de noms NamespaceName1 dans NamespaceName2 est en conflit avec le type TypeName1 dans NamespaceName3.
- CS0435 : l’espace de noms 'namespace' dans 'assembly' est en conflit avec le type importé 'type' dans 'assembly'. Utilisation de l’espace de noms défini dans « assembly ».
- CS0436 : Le type 'type' dans 'assembly' est en conflit avec le type importé 'type2' dans 'assembly'. Utilisation du type défini dans « assembly ».
- CS0437 : Le type 'type' dans 'assembly2' est en conflit avec l’espace de noms importé 'namespace' dans 'assembly1'. Utilisation du type défini dans « assembly ».
- CS0438 : Le type 'type' dans 'module_1' est en conflit avec l’espace de noms 'namespace' dans 'module_2'.
Consultez la référence de langage pour la directive using, l’alias extern et le qualificateur d’alias d’espace de noms concernant les règles qui régissent ces diagnostics. Les correctifs potentiels sont les suivants :
- Utilisez un nom complet ou un alias d’espace de noms lorsque votre code fait référence à un nom qui existe dans plusieurs espaces de noms importés.
- Le compilateur ne peut pas déterminer le type que vous envisagez d’utiliser lorsque le même nom apparaît dans deux espaces de noms ou plus importés par
usingdes directives (CS0104). - Renommez le type ou l’espace de noms lorsqu’un type importé et un espace de noms imbriqué importé partagent le même nom complet. Le compilateur ne peut pas les distinguer lorsque le nom est référencé (CS0434, CS0438).
Pour résoudre les avertissements de conflit d’affectation de noms, renommez l’une des déclarations en conflit, utilisez un espace de noms différent, supprimez la référence d’assembly inutile ou utilisez un alias extern pour lever l’ambiguïté entre les deux définitions. Le compilateur résout automatiquement ces conflits : à l’aide de l’espace de noms défini localement sur le type importé (CS0435), du type défini localement sur le type importé (CS0436) ou du type défini localement sur l’espace de noms importé (CS0437), mais les avertissements indiquent une source potentielle de confusion que vous devez résoudre.
Importations de types prédéfinies
L’erreur suivante concerne les définitions de type prédéfinies manquantes :
- CS0518 : Le type prédéfini 'type' n’est pas défini ou importé.
Note
Cet avertissement est signalé uniquement pendant les opérations de génération ou de reconstruction explicites. Il n’apparaît pas lors de la saisie dans l’IDE dans le cadre des diagnostics IntelliSense. Cela signifie que si vous corrigez l’avertissement en utilisant le champ ou en le supprimant, l’avertissement peut persister dans la liste d’erreurs jusqu’à ce que vous générez ou régénérez le projet.
Consultez la référence du langage d’option du compilateur NoStandardLib pour connaître les règles qui régissent ce diagnostic.
Vérifiez que votre projet cible le runtime .NET approprié. Les types prédéfinis comme System.Int32 et System.String proviennent de la bibliothèque runtime. Une spécification incorrecte ou manquante <TargetFramework> empêche le compilateur de trouver ces types (CS0518). Vérifiez que la <TargetFramework> propriété dans votre .csproj fichier spécifie le runtime prévu (par exemple). net10.0 Ne spécifiez pas l’option du compilateur NoStandardLib , sauf si vous avez l’intention de définir votre propre System espace de noms. Cette option empêche l’importation de la bibliothèque standard qui définit tous les types prédéfinis (CS0518). Si l’erreur persiste, essayez de recharger le projet dans Visual Studio, de supprimer les obj dossiers et bin de reconstruire le projet ou de réinstaller le runtime .NET (CS0518).