Delen via


Waarschuwingen met betrekking tot het gebruik en declareren van naamruimten oplossen

In dit artikel worden de volgende compilerfouten behandeld:

  • CS0104: Fout: 'referentie' is een ambigue referentie tussen 'identifier' en 'identifier'.
  • CS0116: Fout: een naamruimte kan niet rechtstreeks leden bevatten, zoals velden, methoden of instructies.
  • CS0138: Fout: Een using namespace-richtlijn kan alleen op naamruimten worden toegepast; 'type' is een type, geen naamruimte.
  • CS0430: Fout: de externe alias 'alias' is niet opgegeven in een /reference-optie.
  • CS0431: Fout: kan alias 'id' niet gebruiken omdat :: de alias verwijst naar een type. Gebruik . in plaats daarvan.
  • CS0432: Fout: Alias 'id' niet gevonden.
  • CS0434: Fout: De naamruimteNaamruimte1 in NamespaceName2 conflicteert met het type TypeName1 in NamespaceName3.
  • CS0438: Fout: het type 'type' in 'module_1' conflicteert met de naamruimte 'naamruimte' in 'module_2'.
  • CS0439: Fout: Een externe aliasdeclaratie moet voorafgaan aan alle andere elementen die zijn gedefinieerd in de naamruimte.
  • CS0518: Fout: vooraf gedefinieerd type 'type' is niet gedefinieerd of geïmporteerd.
  • CS0576: Fout: naamruimte 'naamruimte' bevat een definitie die conflicteert met alias 'id'.
  • CS0687: Fout: De aliaskwalificatie :: van de naamruimte wordt altijd omgezet in een type of naamruimte, dus is hier illegaal. Overweeg in plaats daarvan te gebruiken . .
  • CS1022: Fout: Type of naamruimtedefinitie, of einde van bestand verwacht.
  • CS1529: Fout: een using-component moet voorafgaan aan alle andere elementen die zijn gedefinieerd in de naamruimte, behalve externe aliasdeclaraties.
  • CS1537: Fout: het gebruik van alias 'alias' verscheen eerder in deze naamruimte.
  • CS1671: Fout: een naamruimtedeclaratie kan geen modifiers of kenmerken hebben.
  • CS1679: Fout: Ongeldige extern alias voor '/reference'; 'id' is geen geldige id.
  • CS1680: Fout: ongeldige aliasoptie: alias=- ontbrekende bestandsnaam.
  • CS1681: Fout: je kunt de globale extern the-alias niet opnieuw definiëren.
  • CS1730: Fout: Assembly- en modulekenmerken moeten voorafgaan aan alle andere elementen die in een bestand zijn gedefinieerd, behalve het gebruik van componenten en externe aliasdeclaraties.
  • CS2034: Fout: een /reference-optie die een extern alias declareert, kan slechts één bestandsnaam hebben. Als u meerdere aliassen of bestandsnamen wilt opgeven, gebruikt u meerdere /verwijzingsopties.
  • CS7000: Fout: Onverwacht gebruik van een aliasnaam.
  • CS7007: Fout: Een using static instructie kan alleen worden toegepast op typen. Overweeg in plaats daarvan een using namespace richtlijn.
  • CS7015: Fout: extern alias is niet geldig in deze context.
  • CS7021: Fout: Kan naamruimte niet declareren in scriptcode.
  • CS8083: Fout: een alias gekwalificeerde naam is geen expressie.
  • CS8085: Fout: een instructie 'using static' kan niet worden gebruikt om een alias te declareren.
  • CS8914: Fout: Een globale gebruiksrichtlijn kan niet worden gebruikt in een naamruimtedeclaratie.
  • CS8915: Fout: Een globale gebruiksrichtlijn moet voorafgaan aan alle niet-globale gebruiksrichtlijnen.
  • CS8954: Fout: Bronbestand mag slechts één naamruimtedeclaratie met bestandsbereik bevatten.
  • CS8955: Fout: Bronbestand mag niet zowel declaraties van bestandsbereiken als normale naamruimten bevatten.
  • CS8956: Fout: Naamruimte met bestandsbereik moet voorafgaan aan alle andere leden in een bestand.
  • CS9130: Fout: Het gebruik van alias kan geen type zijn ref .
  • CS9131: Fout: alleen een using-alias kan worden gedefinieerd als unsafe.
  • CS9132: Fout: Het gebruik van alias kan geen null-verwijzingstype zijn.
  • CS9133: Fout: static modifier moet voorafgaan aan unsafe modifier.
  • CS9162: Type is niet geldig voor 'using static'. Alleen een klasse, struct, interface, enum, delegate of namespace kan worden gebruikt.

En de volgende compilerwaarschuwingen:

  • CS0105: Waarschuwing: de using-richtlijn voor 'naamruimte' is eerder verschenen in deze naamruimte.
  • CS0435: Waarschuwing: de naamruimte 'naamruimte' in 'assembly' conflicteert met het geïmporteerde type 'type' in 'assembly'. Gebruik de naamruimte die is gedefinieerd in 'assembly'.
  • CS0436: Waarschuwing: het type 'type' in 'assembly' conflicteert met het geïmporteerde type 'type2' in 'assembly'. Het type gebruiken dat is gedefinieerd in 'assembly'.
  • CS0437: Waarschuwing: het type 'type' in 'assembly2' conflicteert met de geïmporteerde naamruimte 'naamruimte' in 'assembly1'. Het type gebruiken dat is gedefinieerd in 'assembly'.
  • CS0440: Waarschuwing: Het definiëren van een alias met de naam global is onaangenaam omdat global:: altijd verwijst naar de globale naamruimte en niet naar een alias.
  • CS8019: Info: Onnodig gebruik van richtlijn.
  • CS8020: Info: Ongebruikte extern alias.
  • CS8933: Info: De using-instructie verscheen eerder als globaal gebruik.

Deze fouten en waarschuwingen geven problemen aan met using instructies, naamruimtedeclaraties of naamconflicten tussen typen en naamruimten. In de volgende secties worden deze fouten beschreven en hoe u deze kunt corrigeren.

Gebruik van richtlijnen

De volgende fouten hebben betrekking op using richtlijnen:

  • CS0105: De using directive voor 'naamruimte' is al eerder in deze naamruimte verschenen.
  • CS0430: De externe alias 'alias' is niet opgegeven in een /reference-optie.
  • CS0439: Een extern aliasdeclaratie moet voorafgaan aan alle andere elementen die zijn gedefinieerd in de naamruimte.
  • CS1529: Een using-component moet voorafgaan aan alle andere elementen die zijn gedefinieerd in de naamruimte, behalve externe aliasdeclaraties.
  • CS1679: Ongeldig extern alias voor '/reference'; 'id' is geen geldige id.
  • CS1680: Ongeldige aliasoptie: alias=: ontbrekende bestandsnaam.
  • CS1681: U kunt de globale extern alias niet opnieuw definiëren.
  • CS1730: Assembly- en modulekenmerken moeten voorafgaan aan alle andere elementen die in een bestand zijn gedefinieerd, behalve het gebruik van componenten en externe aliasdeclaraties.
  • CS2034: Een /reference-optie die een externe alias declareert, kan slechts één bestandsnaam hebben. Als u meerdere aliassen of bestandsnamen wilt opgeven, gebruikt u meerdere /verwijzingsopties.
  • CS7015: 'extern alias' is niet geldig in deze context.
  • CS8019: Onnodig gebruik van richtlijn.
  • CS8020: Ongebruikte extern alias.
  • CS8933: De using-richtlijn verscheen eerder als global using.

Zie de using-richtlijn en extern alias naslaginformatie voor de regels die deze diagnostiek beheersen. Mogelijke oplossingen zijn:

  • Verplaats alle using instructies naar het begin van het bestand of naar de bovenkant van de naamruimtedeclaratie. De C#-taal vereist dat using directieven vóór andere elementen in een naamruimte (CS1529) komen.
  • Verplaats alle extern alias declaraties vóór enige using instructies. In de programmeertaal moeten externe aliassen vóór alle andere elementen komen, waaronder using instructies (CS0439, CS7015).
  • Verplaats alle attributen op assembly- en moduleniveau na using clausules en extern alias declaraties, maar vóór eventuele typedeclaraties. Kenmerken moeten de instructies volgen, maar voorafgaan aan typen (CS1730).
  • Zorg ervoor dat elke extern alias declaratie in uw broncode een bijbehorende alias heeft die is gedefinieerd in de referentieopties van uw project. De compiler kan geen alias oplossen die niet is opgegeven (CS0430).
  • Gebruik een afzonderlijke /reference optie voor elke externe alias in plaats van meerdere aliassen in één optie te combineren. Voor de compiler is één alias per referentieoptie (CS2034) vereist.
  • Zorg ervoor dat de alias in uw /reference optie een geldige C#-id is. De alias moet de id-naamgevingsregels (CS1679) volgen. Neem een bestandsnaam op na het =-teken in uw aliasreferentieoptie. De compiler moet weten naar welke assembly de alias verwijst (CS1680).
  • Probeer de global externe alias niet opnieuw te definiëren. global is een vooraf gedefinieerde alias die verwijst naar alle niet-gealiaseerde verwijzingen (CS1681).
  • Dubbele using instructies verwijderen. De compiler waarschuwt wanneer dezelfde naamruimte meerdere keren wordt geïmporteerd (CS0105, CS8019, CS8933).
  • Verwijder ongebruikte extern alias declaraties. De compiler geeft een diagnose uit wanneer een externe alias wordt gedeclareerd maar nooit wordt verwezen in uw code (CS8020).

Statische directive gebruiken

De volgende fouten hebben betrekking op using static richtlijnen:

  • CS0138: Een 'using namespace'-directive kan alleen worden toegepast op naamruimten; 'type' is een type en geen naamruimte.
  • CS7007: Een using static richtlijn kan alleen worden toegepast op typen. Overweeg in plaats daarvan een using namespace richtlijn.
  • CS9133: static modifier moet voorafgaan aan unsafe modifier.
  • CS9162: Type is niet geldig voor het gebruik van 'using static'. Alleen een klasse, struct, interface, enum, delegate of namespace kan worden gebruikt.

Zie de naslaginformatie over de statische instructietaal voor de regels die deze diagnostische gegevens bepalen. Mogelijke oplossingen zijn:

  • Voeg de static modifier toe bij het direct importeren van de leden van een type, omdat weglating van static de compiler aangeeft dat u een naamruimte importeert in plaats van een type (CS0138).
  • Verwijder de wijzigingsfunctie bij het static importeren van een naamruimte, omdat using static deze alleen kan worden toegepast op typen, niet op naamruimten (CS7007). Zorg ervoor dat het doel van een using static richtlijn een klasse, struct, interface, enum of gemachtigde is, omdat andere typen geen geldige doelen zijn voor statische import (CS9162).
  • Plaats de static modifier vóór de unsafe modifier wanneer beide worden gecombineerd, omdat in de taal modifiers in een specifieke volgorde vereist zijn (CS9133).

Globale gebruiksrichtlijn

De volgende fouten hebben betrekking op global using richtlijnen:

  • CS8914: Een globale gebruiksrichtlijn kan niet worden gebruikt in een naamruimtedeclaratie.
  • CS8915: Een globale gebruiksrichtlijn moet voorafgaan aan alle niet-globale gebruiksrichtlijnen.

Zie de globale gebruikt-richtlijn naslaginformatie voor de regels die van toepassing zijn op deze diagnostieken. Mogelijke oplossingen zijn:

  • Verplaats global using richtlijnen buiten een naamruimtedeclaratie naar bestandsbereik, omdat globaal gebruik projectbreed toepast en niet kan worden beperkt tot een naamruimte (CS8914).
  • Plaats alle global using richtlijnen vóór niet-globale using richtlijnen in het bestand, omdat voor de taal globale richtlijnen moeten worden voorafgegaan door lokale richtlijnen (CS8915).
  • Houd er rekening mee dat een static global using instructie niet kan verwijzen naar een lokaal bestandstype .

Naamruimte met bestandsbereik

De volgende fouten hebben betrekking op naamruimten met bestandsbereik:

  • CS8954: Bronbestand mag slechts één naamruimtedeclaratie met bestandsbereik bevatten.
  • CS8955: Bronbestand mag niet zowel declaraties van bestandsbereiken als normale naamruimten bevatten.
  • CS8956: Naamruimte op bestandsniveau moet voorafgaan aan alle andere leden in een bestand.

Raadpleeg de taalreferentie voor bestandsbereiknaamruimten voor de regels die van toepassing zijn op deze diagnostische controles. Mogelijke oplossingen zijn:

  • Gebruik slechts één naamruimtedeclaratie voor bestandsbereik per bestand, omdat in de taal slechts één naamruimte met bestandsbereik de naamruimte voor alle typen in een bestand (CS8954) kan worden ingesteld.
  • Kies declaraties voor bestandsbereiken of declaraties voor naamruimten met blokbereik binnen één bestand, omdat de taal geen combinatie van beide stijlen toestaat (CS8955).
  • Verplaats de declaratie van de naamruimte binnen het bestandsbereik vóór eventuele typedeclaraties, omdat de naamruimte moet worden ingesteld voordat de typen worden gedeclareerd (CS8956).

Aliaskwalificatie

De volgende fouten hebben betrekking op de alias-kwalificatie.

  • CS0431: Kan alias 'id' niet gebruiken omdat :: de alias verwijst naar een type. Gebruik . in plaats daarvan.
  • CS0432: Alias 'id' niet gevonden.
  • CS0440: Het definiëren van een alias met de naam global is onjuist, omdat global:: altijd verwijst naar de globale naamruimte en niet naar een alias.
  • CS0687: De aliaskwalificatie :: van de naamruimte wordt altijd omgezet in een type of naamruimte, dus is hier illegaal. Overweeg in plaats daarvan te gebruiken . .
  • CS7000: Onverwacht gebruik van een aliasnaam.
  • CS8083: Een alias-gekwalificeerde naam is geen uitdrukking.

Zie de naamruimte-aliaskwalificator voor de regels die gelden voor deze diagnostische gegevens. Mogelijke oplossingen zijn:

  • Vervang de :: operator door de . operator wanneer u toegang tot leden van een typealias probeert te krijgen, omdat de :: kwalificatie alleen geldig is voor namespacealiassen, niet voor typealiassen (CS0431, CS0687).
  • Zorg ervoor dat de alias waarnaar u verwijst, is gedeclareerd met een using instructie of extern aliasomdat de compiler geen niet-gedefinieerde alias (CS0432) niet kan oplossen.
  • Gebruik de aliaskwalificatie alleen in contexten waarin een type- of naamruimtenaam wordt verwacht, omdat alias-gekwalificeerde namen niet geldig zijn als expressies (CS7000, CS8083).
  • Kies een andere naam voor uw alias in plaats van global, omdat global is gereserveerd om te verwijzen naar de algemene naamruimte en kan niet opnieuw worden gedefinieerd (CS0440).

Aliasbeperkingen gebruiken

De volgende fouten hebben betrekking op beperkingen voor het gebruik van aliassen:

  • CS0576: Naamruimte 'naamruimte' bevat een definitie die conflicteert met alias 'id'.
  • CS1537: De using alias 'alias' verscheen eerder in deze naamruimte.
  • CS8085: Een 'using static'-instructie kan niet worden gebruikt om een alias te declareren.
  • CS9130: Een alias kan niet als type worden gebruikt ref.
  • CS9131: Alleen een using-alias kan zijn unsafe.
  • CS9132: Het gebruik van alias kan geen null-verwijzingstype zijn.

Zie de taalreferentie voor het gebruik van aliassen voor de regels die van toepassing zijn op deze diagnostiek. Mogelijke oplossingen zijn:

  • Kies een unieke naam voor uw alias die geen conflict veroorzaakt met bestaande type- of naamruimtenamen binnen het bereik, omdat de compiler geen onderscheid kan maken tussen de alias en de bestaande definitie (CS0576).
  • Gebruik elke aliasnaam slechts eenmaal binnen een naamruimte, omdat dubbele aliasdeclaraties dubbelzinnigheid (CS1537) maken.
  • Verwijder de modificator bij het static declareren van een alias, omdat aliassen en statische import elkaar wederzijds uitsluiten: gebruik using static om leden te importeren of using Alias = om een alias te maken, maar niet beide (CS8085).

Vanaf C# 12 gelden de volgende beperkingen voor het gebruik van aliassen:

  • Gebruik geen ref, in, of out modifiers in een using-alias, omdat deze parameter modifiers niet geldig zijn in aliascontexten van typen (CS9130).
  • Gebruik de unsafe wijzigingsfunctie alleen met aliassen die verwijzen naar pointertypen of met using static instructies, omdat unsafe zonder alias of statische import niet is toegestaan (CS9131).
  • Gebruik een niet-null-verwijzingstype bij het maken van een alias naar een verwijzingstype, omdat nullable verwijzingstypen niet rechtstreeks kunnen worden gealiaseerd (CS9132).

Namespace-declaraties

De volgende fouten hebben betrekking op regels voor naamruimtedeclaratie:

  • CS0116: Een naamruimte kan geen leden zoals velden, methoden of instructies rechtstreeks bevatten.
  • CS1022: Type of naamruimtedefinitie, of einde van bestand verwacht.
  • CS1671: Een naamruimtedeclaratie kan geen modifiers of kenmerken hebben.
  • CS7021: Kan naamruimte niet declareren in scriptcode.

Zie het trefwoord voor de naamruimte en de algemene structuur van een C#-programmataal voor de regels die deze diagnostische gegevens bepalen. Mogelijke oplossingen zijn:

  • Zorg ervoor dat alle methoden, velden en eigenschappen worden gedeclareerd binnen een type (klasse, struct, record of interface) in plaats van rechtstreeks in een naamruimte, omdat naamruimten alleen typedeclaraties, geneste naamruimten en using instructies (CS0116) kunnen bevatten.
  • Controleer op niet-overeenkomende accolades in het bronbestand, omdat een extra accolade na een naamruimte of typedefinitie een fout veroorzaakt wanneer de compiler onverwachte inhoud tegenkomt aan het einde van het bestand (CS1022).
  • Verwijder eventuele toegangsmodifiers of kenmerken uit naamruimtedeclaraties, omdat naamruimten geen ondersteuning bieden voor modifiers, zoals public of private, en kenmerken kunnen niet worden toegepast (CS1671).
  • Verplaats naamruimtedeclaraties uit C#-scriptbestanden (.csx) en naar reguliere bronbestanden (.cs), omdat scriptcode evalueert in één uitvoeringscontext die geen ondersteuning biedt voor naamruimtedeclaraties (CS7021).

Naamruimte- en type-naamgevingsconflicten

De volgende fouten en waarschuwingen hebben betrekking op naamconflicten tussen naamruimten en typen:

  • CS0104: 'reference' is een dubbelzinnige referentie tussen 'identifier' en 'identifier'.
  • CS0434: De naamruimte NamespaceName1 in NamespaceName2 conflicteert met het type TypeName1 in NamespaceName3.
  • CS0435: De naamruimte 'naamruimte' in 'assembly' conflicteert met het geïmporteerde type 'type' in 'assembly'. Gebruik de naamruimte die is gedefinieerd in 'assembly'.
  • CS0436: Het type 'type' in 'assembly' conflicteert met het geïmporteerde type 'type2' in 'assembly'. Het type gebruiken dat is gedefinieerd in 'assembly'.
  • CS0437: Het type 'type' in 'assembly2' conflicteert met de geïmporteerde naamruimte 'naamruimte' in 'assembly1'. Het type gebruiken dat is gedefinieerd in 'assembly'.
  • CS0438: Het type 'type' in 'module_1' conflicteert met de naamruimte 'naamruimte' in 'module_2'.

Zie de using-richtlijn, extern alias en naamruimte-alias taalkundige referenties voor de regels die deze diagnostics bepalen. Mogelijke oplossingen zijn:

  • Gebruik een volledig gekwalificeerde naam of een naamruimtealias wanneer uw code verwijst naar een naam die bestaat in meerdere geïmporteerde naamruimten.
  • De compiler kan niet bepalen welk type u wilt gebruiken wanneer dezelfde naam wordt weergegeven in twee of meer naamruimten die zijn geïmporteerd door using instructies (CS0104).
  • Wijzig de naam van het type of de naamruimte wanneer een geïmporteerd type en een geïmporteerde geneste naamruimte dezelfde volledig gekwalificeerde naam delen. De compiler kan er geen onderscheid tussen maken wanneer naar de naam wordt verwezen (CS0434, CS0438).

Als u de naamgevingsconflictwaarschuwingen wilt oplossen, wijzigt u de naam van een van de conflicterende declaraties, gebruikt u een andere naamruimte, verwijdert u de overbodige assemblyverwijzing of gebruikt u een extern alias om onderscheid te maken tussen de twee definities. De compiler lost deze conflicten automatisch op, met behulp van de lokaal gedefinieerde naamruimte boven het geïmporteerde type (CS0435), het lokaal gedefinieerde type boven het geïmporteerde type (CS0436) of het lokaal gedefinieerde type via de geïmporteerde naamruimte (CS0437), maar de waarschuwingen geven een mogelijke bron van verwarring aan die u moet aanpakken.

Vooraf gedefinieerde invoertypen

De volgende fout heeft betrekking op ontbrekende vooraf gedefinieerde typedefinities:

  • CS0518: Voorgedefinieerd type 'type' is niet gedefinieerd of geïmporteerd.

Opmerking

Deze waarschuwing wordt alleen gerapporteerd tijdens expliciete build - of herbouwbewerkingen . Deze wordt niet weergegeven tijdens het typen in de IDE als onderdeel van Diagnostische gegevens van IntelliSense. Dit betekent dat als u de waarschuwing herstelt door het veld te gebruiken of te verwijderen, de waarschuwing in de foutenlijst kan blijven staan totdat u het project bouwt of herbouwt.

Zie de taalreferentie voor de NoStandardLib compileroptie voor de regels die deze diagnose regelen.

Controleer of uw project is gericht op de juiste .NET-runtime. Vooraf gedefinieerde typen zoals System.Int32 deze System.String afkomstig zijn uit de runtimebibliotheek. Een onjuiste of ontbrekende <TargetFramework> specificatie voorkomt dat de compiler deze typen kan vinden (CS0518). Zorg ervoor dat de <TargetFramework> eigenschap in uw .csproj bestand de beoogde runtime opgeeft (bijvoorbeeld net10.0). Geef de optie NoStandardLib-compiler niet op, tenzij u uw eigen System naamruimte wilt definiëren. Met deze optie voorkomt u dat de standaardbibliotheek wordt geïmporteerd die alle vooraf gedefinieerde typen (CS0518) definieert. Als de fout zich blijft voordoen, laadt u het project opnieuw in Visual Studio, verwijdert u de obj en bin mappen en bouwt u het project opnieuw of installeert u de .NET-runtime (CS0518).