Résoudre les avertissements liés à l’utilisation et à la déclaration d’espaces de noms

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 static directive ne peut être appliquée qu’aux types. Considérez plutôt une using namespace directive.
  • 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 static doit précéder le modificateur unsafe.
  • 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é global n’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 using en haut du fichier ou en haut de la déclaration d’espace de noms. Le langage C# exige que using les directives doivent précéder d’autres éléments dans un espace de noms (CS1529).
  • Déplacez toutes les déclarations extern alias avant toutes les directives using. Le langage exige que les alias externes soient fournis avant tous les autres éléments, y compris les directives using (CS0439, CS7015).
  • Déplacez tous les attributs au niveau de l'assembly et du module après les clauses using et les déclarations extern 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 alias dé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 /reference pour 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 /reference option 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 global extern. global est 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 static directive ne peut être appliquée qu’aux types. Considérez plutôt une using namespace directive.
  • CS9133 : le static modificateur doit précéder le unsafe modificateur.
  • 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 static modificateur lors de l’importation directe des membres d’un type, car l’omission static indique au compilateur que vous importez un espace de noms plutôt qu’un type (CS0138).
  • Supprimez le modificateur lors de l’importation static d’un espace de noms, car using static il ne peut être appliqué qu’aux types, et non aux espaces de noms (CS7007). Vérifiez que la cible d’une using static directive 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 static avant le modificateur unsafe lors 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 using en 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 using directives non globales using dans le fichier, car la langue exige que les directives globales précèdent les directives locales (CS8915).
  • Notez qu’une static global using directive 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é global n’est pas conseillée, car global:: 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 using directive ou extern 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, car global est 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 ref type.
  • 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 static déclaration d’un alias, car les alias et les importations statiques sont mutuellement exclusifs : utilisez-le using static pour importer des membres ou using 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, in ou out dans un alias using, car ces modificateurs de paramètres ne sont pas valides dans les contextes d'alias de type (CS9130).
  • Utilisez le unsafe modificateur uniquement avec des alias qui référencent des types de pointeur ou avec using static des directives, car unsafe sans 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 using des 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 public ou private, 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 using des 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).