Lösa varningar som rör användning och deklarering av namnområden

Den här artikeln beskriver följande kompilatorfel:

  • CS0104: Fel: "referens" är en tvetydig referens mellan "identifierare" och "identifierare".
  • CS0116: Fel: Ett namnområde får inte innehålla medlemmar direkt, till exempel fält, metoder eller instruktioner.
  • CS0138: Fel: En using namespace-sats kan bara tillämpas på namnrymder; "type" är en typ och inte en namnrymd.
  • CS0430: Fel: Det externa aliaset "alias" angavs inte i alternativet /reference.
  • CS0431: Fel: Det går inte att använda aliaset "identifierare" med :: eftersom aliaset refererar till en typ. Använd . i stället.
  • CS0432: Fel: Aliaset "identifierare" hittades inte.
  • CS0434: Fel: Namnområdet NamespaceName1 i NamespaceName2 står i konflikt med typen TypeName1 i NamespaceName3.
  • CS0438: Fel: Typen "type" i "module_1" står i konflikt med namnområdet "namespace" i "module_2".
  • CS0439: Fel: En extern aliasdeklaration måste föregå alla andra element som definierats i namnområdet.
  • CS0518: Fel: Fördefinierade typen "typ" har inte definierats eller importerats.
  • CS0576: Fel: Namnområdet "namnområde" innehåller en definition som är i konflikt med aliaset 'identifier'.
  • CS0687: Fel: Namnområdesaliaskvalificeraren :: matchar alltid en typ eller ett namnområde, så det är inte tillåtet här. Överväg att använda . i stället.
  • CS1022: Fel: Typ eller namnområdesdefinition eller filslut förväntas.
  • CS1529: Fel: En användningssats måste föregå alla andra element som definierats i namnområdet förutom externa aliasdeklarationer.
  • CS1537: Fel: Aliaset "alias" har definierats tidigare i det här namnområdet.
  • CS1671: Fel: En namnområdesdeklaration kan inte ha modifierare eller attribut.
  • CS1679: Fel: Ogiltigt externt alias för '/reference'; "identifierare" är inte en giltig identifierare.
  • CS1680: Fel: Ogiltigt referensaliasalternativ: "alias=" – filnamn saknas.
  • CS1681: Fel: Du kan inte omdefiniera det globala externa aliaset.
  • CS1730: Fel: Sammansättnings- och modulattribut måste föregå alla andra element som definierats i en fil utom med hjälp av satser och externa aliasdeklarationer.
  • CS2034: Fel: Ett /reference-alternativ som deklarerar ett externt alias kan bara ha ett filnamn. Om du vill ange flera alias eller filnamn använder du flera /reference-alternativ.
  • CS7000: Fel: Oväntad användning av ett aliasnamn.
  • CS7007: Fel: Ett using static direktiv kan endast tillämpas på typer. Överväg i stället ett using namespace direktiv.
  • CS7015: Fel: "externt alias" är inte giltigt i den här kontexten.
  • CS7021: Fel: Det går inte att deklarera namnområdet i skriptkoden.
  • CS8083: Fel: Ett aliasbevalt namn är inte ett uttryck.
  • CS8085: Fel: Ett "använda statiskt" direktiv kan inte användas för att deklarera ett alias.
  • CS8914: Fel: Ett globalt användningsdirektiv kan inte användas i en namnområdesdeklaration.
  • CS8915: Fel: Ett globalt användningsdirektiv måste föregå alla icke-globala användningsdirektiv.
  • CS8954: Fel: Källfilen kan bara innehålla en filomfattande namnområdesdeklaration.
  • CS8955: Fel: Källfilen kan inte innehålla både filomfattande och normala namnområdesdeklarationer.
  • CS8956: Fel: Filomfattande namnområde måste föregå alla andra medlemmar i en fil.
  • CS9130: Fel: Användning av alias kan inte vara en ref typ.
  • CS9131: Fel: Endast ett använda alias kan vara unsafe.
  • CS9132: Fel: Användning av alias kan inte vara en referenstyp som kan ogiltigförklaras.
  • CS9133: Fel: static modifikatorn måste föregå unsafe modifikatorn.
  • CS9162: Typen är inte giltig för "using static". Endast en klass, struct, gränssnitt, enum, delegering eller namnrymd kan användas.

Och följande kompilatorvarningar:

  • CS0105: Varning: Användningsdirektivet för "namnområde" visades tidigare i det här namnområdet.
  • CS0435: Varning: Namnområdet "namnområde" i "sammansättning" står i konflikt med den importerade typen "typ" i "sammansättning". Använda namnområdet som definierats i "sammansättning".
  • CS0436: Varning: Typen "typ" i "sammansättning" står i konflikt med den importerade typen "type2" i "sammansättning". Använda den typ som definierats i "sammansättning".
  • CS0437: Varning: Typen "type" i "assembly2" står i konflikt med det importerade namnområdet "namespace" i "assembly1". Använda den typ som definierats i "sammansättning".
  • CS0440: Varning: Det är inte klokt att definiera ett alias med namnet global eftersom global:: det alltid refererar till det globala namnområdet och inte ett alias.
  • CS8019: Info: Onödig användning av direktiv.
  • CS8020: Info: Oanvänd externt alias.
  • CS8933: Info: Användningsdirektivet visades tidigare som global användning.

Dessa fel och varningar indikerar problem med using direktiv, namnområdesdeklarationer eller namngivningskonflikter mellan typer och namnområden. I följande avsnitt beskrivs dessa fel och hur du korrigerar dem.

Användning av direktiv

Följande fel gäller using direktiv:

  • CS0105: Användningsdirektivet för "namnområde" visades tidigare i det här namnområdet.
  • CS0430: Det externa aliaset "alias" angavs inte i alternativet /reference.
  • CS0439: En extern aliasdeklaration måste föregå alla andra element som definierats i namnområdet.
  • CS1529: En användningssats måste föregå alla andra element som definierats i namnområdet förutom externa aliasdeklarationer.
  • CS1679: Ogiltigt externt alias för '/reference'; "identifierare" är inte en giltig identifierare.
  • CS1680: Ogiltigt referensaliasalternativ: "alias=" – filnamn saknas.
  • CS1681: Du kan inte omdefiniera det globala externa aliaset.
  • CS1730: Sammansättnings- och modulattribut måste föregå alla andra element som definierats i en fil utom med hjälp av satser och externa aliasdeklarationer.
  • CS2034: Ett /reference-alternativ som deklarerar ett externt alias kan bara ha ett filnamn. Om du vill ange flera alias eller filnamn använder du flera /reference-alternativ.
  • CS7015: "externt alias" är inte giltigt i den här kontexten.
  • CS8019: Onödig användning av direktiv.
  • CS8020: Oanvänd externt alias.
  • CS8933: Användningsdirektivet visades tidigare som global användning.

Se referensen för användningsdirektivet och externt aliasspråk för de regler som styr diagnostiken. Potentiella korrigeringar är:

  • Flytta alla using direktiv överst i filen eller längst upp i namnområdesdeklarationen. C#-språket kräver using att direktiven kommer före andra element i ett namnområde (CS1529).
  • Flytta alla extern alias deklarationer före eventuella using direktiv. Språket kräver externa alias för att komma före alla andra element, inklusive using direktiv (CS0439, CS7015).
  • Flytta alla attribut på sammansättnings- och modulnivå efter using satser och extern alias deklarationer men före eventuella typdeklarationer. Attribut måste följa direktiv men föregå typer (CS1730).
  • Se till att varje extern alias deklaration i källkoden har ett motsvarande alias som definierats i projektets referensalternativ. Kompilatorn kan inte matcha ett alias som inte har angetts (CS0430).
  • Använd ett separat /reference alternativ för varje externt alias i stället för att kombinera flera alias i ett enda alternativ. Kompilatorn kräver ett alias per referensalternativ (CS2034).
  • Kontrollera att aliaset i alternativet /reference är en giltig C#-identifierare. Aliaset måste följa namngivningsreglerna för identifierare (CS1679). Inkludera ett filnamn efter tecknet = i ditt aliasreferensalternativ. Kompilatorn måste veta vilken sammansättning aliaset refererar till (CS1680).
  • Försök inte omdefiniera det externa aliaset global . global är ett fördefinierat alias som refererar till alla oaliaserade referenser (CS1681).
  • Ta bort duplicerade using direktiv. Kompilatorn varnar när samma namnområde importeras flera gånger (CS0105, CS8019, CS8933).
  • Ta bort oanvända extern alias deklarationer. Kompilatorn utfärdar en diagnostik när ett externt alias deklareras men aldrig refereras till i din kod (CS8020).

Använda statiskt direktiv

Följande fel gäller using static direktiv:

  • CS0138: Ett 'using namespace'-direktiv kan endast tillämpas på namnområden; 'type' är en typ och inte ett namnområde.
  • CS7007: Ett using static direktiv kan endast tillämpas på typer. Överväg i stället ett using namespace direktiv.
  • CS9133: static modifierare måste föregå unsafe modifierare.
  • CS9162: Typen är inte giltig för "användning av statisk". Endast en klass, struct, gränssnitt, uppräkning, ombud eller namnrymd kan användas.

Se språkreferensen för att använda statiskt direktiv för de regler som styr diagnostiken. Potentiella korrigeringar är:

  • static Lägg till modifieraren när du importerar en typs medlemmar direkt, eftersom utelämnande static talar om för kompilatorn att du importerar ett namnområde i stället för en typ (CS0138).
  • static Ta bort modifieraren när du importerar ett namnområde eftersom using static endast kan tillämpas på typer, inte namnområden (CS7007). Se till att målet för ett using static direktiv är en klass, struct, gränssnitt, uppräkning eller ombud, eftersom andra typer inte är giltiga mål för statisk import (CS9162).
  • static Placera modifieraren före unsafe modifieraren när du kombinerar båda, eftersom språket kräver modifierare i en viss ordning (CS9133).

Globalt användningsdirektiv

Följande fel gäller global using direktiv:

  • CS8914: Ett globalt användningsdirektiv kan inte användas i en namnområdesdeklaration.
  • CS8915: Ett globalt användningsdirektiv måste föregå alla icke-globala användningsdirektiv.

Se språkreferensen global using directive för de regler som styr dessa diagnostiker. Potentiella korrigeringar är:

  • Flytta global using direktiv utanför en namnområdesdeklaration till filomfånget, eftersom globala användningar gäller för hela projektet och inte kan begränsas till ett namnområde (CS8914).
  • Placera alla global using direktiv före alla icke-globala using direktiv i filen, eftersom språket kräver att globala direktiv föregår lokala direktiv (CS8915).
  • Observera att ett static global using direktiv inte kan referera till en fillokal typ.

Namnrymd begränsad till fil

Följande fel gäller namnområden som är filavgränsade:

  • CS8954: Källfilen kan bara innehålla en deklaration för filomfattningsnamnområde.
  • CS8955: Källfilen kan inte innehålla både filomfattande och normala namnområdesdeklarationer.
  • CS8956: Filomfattande namnområde måste komma före alla andra medlemmar i en fil.

Se språkreferensen fileomfattande namnområde för de regler som styr dessa diagnostiska regler. Potentiella korrigeringar är:

  • Använd endast en filomfattande namnområdesdeklaration per fil, eftersom språket endast tillåter ett enda filomfattningsnamnområde att ange namnområdet för alla typer i en fil (CS8954).
  • Välj antingen filomfattande eller blockomfattande namnområdesdeklarationer i en enda fil, eftersom språket inte tillåter blandning av båda formaten (CS8955).
  • Flytta deklarationen för filomfattningsnamnområde före eventuella typdeklarationer, eftersom namnområdet måste upprättas innan typer deklareras (CS8956).

Alias-kvalificerare

Följande fel gäller aliaskvalificeraren:

  • CS0431: Det går inte att använda aliaset "identifierare" med :: eftersom aliaset refererar till en typ. Använd . i stället.
  • CS0432: Aliasidentifierare hittades inte.
  • CS0440: Det är inte klokt att definiera ett alias med namnet global eftersom global:: det alltid refererar till det globala namnområdet och inte ett alias.
  • CS0687: Namnområdesaliaskvalificeraren :: matchar alltid en typ eller ett namnområde, så det är inte tillåtet här. Överväg att använda . i stället.
  • CS7000: Oväntad användning av ett aliasnamn.
  • CS8083: Ett aliasbevalt namn är inte ett uttryck.

Se språkreferensen för namnområdesaliaskvalant för de regler som styr diagnostiken. Potentiella korrigeringar är:

  • Ersätt operatorn :: med operatorn . när du kommer åt medlemmar i ett typalias, eftersom :: kvalificeraren endast är giltig för namnområdesalias, inte typalias (CS0431, CS0687).
  • Kontrollera att aliaset som du refererar till deklareras med ett using direktiv eller extern alias, eftersom kompilatorn inte kan matcha ett odefinierat alias (CS0432).
  • Använd endast aliaskvalificeraren i kontexter där ett typ- eller namnområdesnamn förväntas, eftersom aliaskvalificerade namn inte är giltiga som uttryck (CS7000, CS8083).
  • Välj ett annat namn för ditt alias i stället för global, eftersom global är reserverat för att referera till det globala namnområdet och kan inte omdefinieras (CS0440).

Använda aliasbegränsningar

Följande fel gäller begränsningar för användning av alias:

  • CS0576: Namnområde 'namespace' innehåller en definition som står i konflikt med aliaset 'identifierare'.
  • CS1537: Aliaset "alias" förekom tidigare i det här namnområdet.
  • CS8085: Ett "använda statiskt" direktiv kan inte användas för att deklarera ett alias.
  • CS9130: Användning av alias kan inte vara en ref typ.
  • CS9131: Endast ett använda alias kan vara unsafe.
  • CS9132: Användning av alias kan inte vara en nullbar referenstyp.

Se språkreferensen för 'using alias' för de regler som styr diagnoserna. Potentiella korrigeringar är:

  • Välj ett unikt namn för ditt alias som inte står i konflikt med befintliga typ- eller namnområdesnamn i omfånget, eftersom kompilatorn inte kan skilja mellan aliaset och den befintliga definitionen (CS0576).
  • Använd endast varje aliasnamn en gång inom ett namnområde eftersom dubbla aliasdeklarationer skapar tvetydighet (CS1537).
  • static Ta bort modifieraren när du deklarerar ett alias, eftersom alias och statiska importer är ömsesidigt uteslutande – använd antingen using static för att importera medlemmar eller using Alias = för att skapa ett alias, men inte båda tillsammans (CS8085).

Från och med C# 12 gäller följande begränsningar för användning av alias:

  • Använd inte ref, in eller out-modifierare i ett alias eftersom dessa parametermodifierare inte är giltiga i typ aliaskontexter (CS9130).
  • Använd unsafe-modifieraren endast med alias som refererar till pekartyper eller med using static-direktiv, eftersom unsafe utan ett alias eller statisk import inte är tillåtet (CS9131).
  • Använd en referenstyp som inte kan nollas när du skapar ett alias till en referenstyp, eftersom referenstyper som kan användas som null inte kan aliaseras direkt (CS9132).

Namnområdesdeklarationer

Följande fel gäller för regler för namnområdesdeklaration:

  • CS0116: Ett namnområde får inte innehålla medlemmar direkt, till exempel fält, metoder eller instruktioner.
  • CS1022: Typ eller namnområdesdefinition eller filslut förväntas.
  • CS1671: En namnområdesdeklaration kan inte ha modifierare eller attribut.
  • CS7021: Det går inte att deklarera namnområdet i skriptkoden.

Se nyckelordet för namnområdet och den allmänna strukturen för en C#-programspråkreferens för de regler som styr diagnostiken. Potentiella korrigeringar är:

  • Se till att alla metoder, fält och egenskaper deklareras i en typ (klass, struct, post eller gränssnitt) i stället för direkt i ett namnområde, eftersom namnområden bara kan innehålla typdeklarationer, kapslade namnområden och using direktiv (CS0116).
  • Sök efter felmatchade klammerparenteser i källfilen eftersom en extra avslutande klammerparentes efter ett namnområde eller en typdefinition genererar ett fel när kompilatorn stöter på oväntat innehåll i slutet av filen (CS1022).
  • Ta bort alla åtkomstmodifierare eller attribut från namnområdesdeklarationer, eftersom namnområden inte stöder modifierare som public eller private, och attribut inte kan tillämpas på dem (CS1671).
  • Flytta namnområdesdeklarationer från C#-skriptfiler (.csx) och till vanliga källfiler (.cs), eftersom skriptkoden utvärderas i en enda körningskontext som inte stöder namnområdesdeklarationer (CS7021).

Namnområdes- och typnamnskonflikter

Följande fel och varningar gäller namngivningskonflikter mellan namnområden och typer:

  • CS0104: "referens" är en tvetydig referens mellan "identifierare" och "identifierare".
  • CS0434: Namnområdet NamespaceName1 i NamespaceName2 står i konflikt med typen TypeName1 i NamespaceName3.
  • CS0435: Namnområdet "namnområde" i "sammansättning" står i konflikt med den importerade typen "typ" i "sammansättning". Använda namnområdet som definierats i "sammansättning".
  • CS0436: Typen "typ" i "sammansättning" står i konflikt med den importerade typen "type2" i "sammansättning". Använda den typ som definierats i "sammansättning".
  • CS0437: Typen "type" i "assembly2" står i konflikt med det importerade namnområdet "namespace" i "assembly1". Använda den typ som definierats i "sammansättning".
  • CS0438: Typen "type" i "module_1" står i konflikt med namnområdet "namespace" i "module_2".

Se språkreferensen för användningsdirektiv, externt alias och namnområdesalias för de regler som styr diagnostiken. Potentiella korrigeringar är:

  • Använd ett fullständigt kvalificerat namn eller ett namnområdesalias när koden refererar till ett namn som finns i flera importerade namnområden.
  • Kompilatorn kan inte avgöra vilken typ du tänker använda när samma namn visas i två eller flera namnområden som importerats av using direktiv (CS0104).
  • Byt namn på typen eller namnområdet när en importerad typ och ett importerat kapslat namnområde delar samma fullständigt kvalificerade namn. Kompilatorn kan inte skilja mellan dem när namnet refereras (CS0434, CS0438).

Lös varningar om namngivningskonflikter genom att byta namn på en av de motstridiga deklarationerna, använda ett annat namnområde, ta bort den onödiga sammansättningsreferensen eller använda ett externt alias för att skilja mellan de två definitionerna. Kompilatorn löser dessa konflikter automatiskt – med hjälp av det lokalt definierade namnområdet över den importerade typen (CS0435), den lokalt definierade typen över den importerade typen (CS0436) eller den lokalt definierade typen över det importerade namnområdet (CS0437) – men varningarna tyder på en potentiell källa till förvirring som du bör åtgärda.

Fördefinierade typimporter

Följande fel gäller saknade fördefinierade typdefinitioner:

  • CS0518: Den fördefinierade typen "typ" har inte definierats eller importerats.

Anmärkning

Den här varningen rapporteras endast under explicita bygg- eller ombyggnadsåtgärder . Den visas inte under inmatningen i IDE som en del av IntelliSense-diagnostiken. Det innebär att om du åtgärdar varningen med hjälp av fältet eller tar bort den kan varningen finnas kvar i fellistan tills du skapar eller återskapar projektet igen.

Se alternativspråksreferensen för NoStandardLib-kompilatorn för de regler som styr diagnostiken.

Kontrollera att projektet är avsett för rätt .NET-plattform. Fördefinierade typer som System.Int32 och System.String kommer från körbiblioteket. En felaktig eller saknad <TargetFramework> specifikation hindrar kompilatorn från att hitta dessa typer (CS0518). Se till att <TargetFramework> egenskapen i din .csproj fil anger den avsedda körmiljön (till exempel net10.0). Ange inte kompilatoralternativet NoStandardLib om du inte tänker definiera ditt eget System namnområde. Det här alternativet förhindrar import av standardbiblioteket som definierar alla fördefinierade typer (CS0518). Om felet kvarstår kan du prova att läsa in projektet igen i Visual Studio, ta bort mapparna obj och bin och återskapa projektet eller installera om .NET-körningen (CS0518).