Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 staticdirektiv kan endast tillämpas på typer. Överväg i stället ettusing namespacedirektiv. - 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
reftyp. -
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:
staticmodifikatorn måste föregåunsafemodifikatorn. - 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
globaleftersomglobal::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
usingdirektiv överst i filen eller längst upp i namnområdesdeklarationen. C#-språket kräverusingatt direktiven kommer före andra element i ett namnområde (CS1529). - Flytta alla
extern aliasdeklarationer före eventuellausingdirektiv. Språket kräver externa alias för att komma före alla andra element, inklusiveusingdirektiv (CS0439, CS7015). - Flytta alla attribut på sammansättnings- och modulnivå efter
usingsatser ochextern aliasdeklarationer men före eventuella typdeklarationer. Attribut måste följa direktiv men föregå typer (CS1730). - Se till att varje
extern aliasdeklaration 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
/referencealternativ 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
usingdirektiv. Kompilatorn varnar när samma namnområde importeras flera gånger (CS0105, CS8019, CS8933). - Ta bort oanvända
extern aliasdeklarationer. 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 staticdirektiv kan endast tillämpas på typer. Överväg i stället ettusing namespacedirektiv. -
CS9133:
staticmodifierare måste föregåunsafemodifierare. - 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:
-
staticLägg till modifieraren när du importerar en typs medlemmar direkt, eftersom utelämnandestatictalar om för kompilatorn att du importerar ett namnområde i stället för en typ (CS0138). -
staticTa bort modifieraren när du importerar ett namnområde eftersomusing staticendast kan tillämpas på typer, inte namnområden (CS7007). Se till att målet för ettusing staticdirektiv är en klass, struct, gränssnitt, uppräkning eller ombud, eftersom andra typer inte är giltiga mål för statisk import (CS9162). -
staticPlacera modifieraren föreunsafemodifieraren 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 usingdirektiv 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 usingdirektiv före alla icke-globalausingdirektiv i filen, eftersom språket kräver att globala direktiv föregår lokala direktiv (CS8915). - Observera att ett
static global usingdirektiv 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
globaleftersomglobal::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
usingdirektiv ellerextern 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, eftersomglobalä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
reftyp. -
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).
-
staticTa bort modifieraren när du deklarerar ett alias, eftersom alias och statiska importer är ömsesidigt uteslutande – använd antingenusing staticför att importera medlemmar ellerusing 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,inellerout-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 medusing static-direktiv, eftersomunsafeutan 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
usingdirektiv (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
publicellerprivate, 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
usingdirektiv (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).