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.
Kompilatorn genererar följande fel för felaktig användning av förprocessordirektiv:
- CS1024: Förprocessordirektivet förväntas
- CS1025: Enradskommentar eller slut på rad förväntas
- CS1027: #endif direktiv förväntas
- CS1028: Oväntat förprocessordirektiv
- CS1029: #error: "text"
- CS1030: #warning: "text"
- CS1032: Det går inte att definiera/odefiniera förprocessorsymboler efter den första token i filen
- CS1038: direktiv #endregion förväntas
- CS1040: Förprocessordirektiv måste visas som det första icke-blankstegstecknet på en rad
- CS1517: Ogiltigt preprocessoruttryck
- CS1560: Ogiltigt filnamn som angetts för förprocessordirektivet. Filnamnet är för långt eller inte ett giltigt filnamn
- CS1576: Radnumret som angetts för #line direktiv saknas eller är ogiltigt
- CS1578: Filnamn, enradskommentar eller radslut förväntas
- CS1633: Okänt #pragma direktiv
- CS1634: Förväntas inaktivera eller återställa
- CS1635: Det går inte att återställa varningskoden eftersom den har inaktiverats globalt
- CS1691: "number" är inte ett giltigt varningsnummer
- CS1692: Ogiltigt tal
- CS1694: Ogiltigt filnamn som angetts för förprocessordirektivet. Filnamnet är för långt eller inte ett giltigt filnamn
- CS1695: Ogiltig #pragma kontrollsummasyntax; bör vara #pragma kontrollsumman "filnamn" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX..."
- CS1696: Enradskommentar eller slutpunkt för rad förväntas
- CS1709: Filnamnet som anges för förprocessordirektivet är tomt
- CS7009: Det går inte att använda #r efter den första token i filen
- CS7010: Det angivna filnamnet förväntas
- CS7011: #r tillåts endast i skript
- CS8097: #load tillåts endast i skript
- CS8098: Det går inte att använda #load efter den första token i filen
- CS8301: Ogiltigt namn för en förbearbetningssymbol; "symbolnamn" är inte en giltig identifierare
- CS8938: Värdet för #line-direktivet saknas eller ligger inom intervallet
- CS8939: Slutpositionen för #line-direktivet måste vara större än eller lika med startpositionen
- CS8996: Råsträngliteraler tillåts inte i förprocessordirektiv
- CS9028: #line span-direktivet kräver utrymme före den första parentesen, före teckenförskjutningen och före filnamnet
-
CS9297:
#:direktiv kan inte vara efter första token i filen -
CS9298:
#:direktiv kan endast användas i filbaserade appar (-features:FileBasedProgram) -
CS9299:
#:direktiv får inte placeras efter#ifdirektiv -
CS9314:
#!direktiv kan endast användas i skript eller filbaserade appar - CS9378: '#!' måste vara de första tecknen på den första raden i filen
Ogiltig preprocessor-direktivsyntax
- CS1024: Förprocessordirektiv förväntas
- CS1025: Enradskommentar eller slut på rad förväntas
- CS1027: #endif-direktiv förväntat
- CS1028: Oväntat förprocessordirektiv
- CS1032: Det går inte att definiera/odefiniera förprocessorsymboler efter den första token i filen
- CS1038: #endregion direktiv förväntas
- CS1040: Förprocessordirektiv måste visas som det första icke-blankstegstecknet på en rad
- CS1517: Ogiltigt preprocessoruttryck
- CS1633: Oidentifierad #pragma-direktiv
- CS1696: Enradskommentar eller slutpunkt för rad förväntas
- CS8996: Råsträngliteraler tillåts inte i förprocessordirektiv
Dessa fel indikerar att du använde ogiltig syntax för preprocessor-direktiv. Vanliga orsaker är
- Använda ett okänt direktiv efter
#(CS1024, CS1633). - Inklusive flerradskommentarer på direktivrader (CS1025, CS1696).
- Använda direktiv på oväntade platser (CS1028).
- Nödvändiga matchningsdirektiv saknas (CS1027, CS1038).
- Placera ett
#defineeller#undef-direktiv efter den första token i filen (CS1032). - Att inte placera direktivet som det första tecknet på en rad (CS1040).
- Använda ogiltiga uttryck i villkorlig kompilering (CS1517).
- Använda råa strängliteraler i förprocessordirektiv (CS8996).
CS1024-exempel – Förprocessordirektivet förväntas:
#import System // CS1024 - "import" is not a valid directive
CS1025-exempel – Enradskommentar eller slutpunkt för rad förväntas:
#if true /* hello
*/ // CS1025 - multiline comment not allowed
#endif
CS1027-exempel – #endif direktiv förväntas:
#if true // CS1027 - missing #endif
class Test { }
CS1028-exempel – Oväntat förprocessordirektiv:
#endif // CS1028 - no matching #if
CS1032-exempel – #define och #undef förprocessordirektiv måste visas före andra token:
class Test { }
#define X // CS1032 - directive appears after the first token
Åtgärda det här felet genom att placera alla #define och #undef direktiv före den första token i filen:
#define X
#undef Y
class Test { }
CS1038-exempel – #endregion direktiv förväntas:
#region testing
class Test { }
// CS1038 - missing #endregion
CS1040-exempel – Förprocessordirektiv måste visas som det första icke-blankstegstecknet:
/* Comment */ #define X // CS1040 - directive not first on line
CS1517-exempel – Ogiltigt preprocessoruttryck:
#if 1 // CS1517 - numeric literals not allowed
#endif
#if ~symbol // CS1517 - bitwise operators not allowed
#endif
CS1633-exempel – Okänt #pragma direktiv:
#pragma unknown // CS1633 - "unknown" is not a valid pragma
CS8996-exempel – Råsträngliteraler tillåts inte i förprocessordirektiv:
// CS8996.cs
#pragma checksum """raw_string""" "{406EA660-64CF-4C82-B6F0-42D48172A799}" "hash" // CS8996
class Test { }
Åtgärda det här felet genom att använda en vanlig strängliteral:
#pragma checksum "filename.cs" "{406EA660-64CF-4C82-B6F0-42D48172A799}" "hash" // OK
class Test { }
Åtgärda dessa fel genom att se till att dina förprocessordirektiv följer rätt syntaxregler som beskrivs i dokumentationen för förprocessordirektiv.
Ogiltiga symbolnamn för förprocessor
- CS8301: Ogiltigt namn för en förbearbetningssymbol; "symbolnamn" är inte en giltig identifierare
När du skapar CSharpParseOptions programmatiskt anger du varje villkorsstyrd kompileringssymbol som ett identifierarformat namn. Det första tecknet måste vara giltigt i början av en C#-identifierare och de återstående tecknen måste vara giltiga identifierartecken. Roslyn accepterar även nyckelordstext som ett symbolnamn, men lägger inte till något @ prefix. Ta inte med blanksteg, skiljetecken som . eller -, en tilldelning som FEATURE=1, eller ett fullständigt villkorsuttryck.
En förbearbetningssymbol registrerar endast om dess namn har definierats. Det lagrar inte något värde. Ogiltiga namn som anges via projektegenskapen DefineConstants eller kompileringsalternativet -define skapar CS2029 i stället. Se DefineConstants.
#error och #warning direktivfel
- CS1029: #error: "text"
- CS1030: #warning: "text"
- CS1634: Förväntas inaktivera eller återställa
- CS1635: Det går inte att återställa varningskoden eftersom den har inaktiverats globalt
- CS1691: "number" är inte ett giltigt varningsnummer
- CS1692: Ogiltigt tal
Dessa fel uppstår när kompilatorn bearbetar #error, #warningoch #pragma warning direktiv. Med de här direktiven kan du generera anpassade fel- och varningsmeddelanden under kompilering och kontroll av varningsbeteende.
CS1029 visar texten för ett fel som definierats med #error direktivet:
// CS1029.cs
class Sample
{
static void Main()
{
#error Let's give an error here // CS1029
}
}
Kompilering ger följande utdata:
example.cs(9,8): error CS1029: #error: 'Let's give an error here // CS1029 '
CS1030 visar texten i en varning som definierats med #warning direktivet:
// CS1030.cs
class Sample
{
static void Main()
{
#warning Let's give a warning here
}
}
Kompilering ger följande utdata:
example.cs(6,16): warning CS1030: #warning: 'Let's give a warning here'
CS1634 inträffar när en #pragma warning sats är dåligt utformad, till exempel när inaktivera eller återställa utelämnas:
// CS1634.cs
// compile with: /W:1
#pragma warning // CS1634
// Try this instead:
// #pragma warning disable 0219
class MyClass
{
public static void Main()
{
}
}
CS1635 inträffar när du använder kommandoradsalternativet eller projektinställningen /nowarn för att inaktivera en varning globalt, men använder #pragma warning restore för att försöka återställa varningen:
// CS1635.cs
// compile with: /w:1 /nowarn:162
enum MyEnum {one=1,two=2,three=3};
class MyClass
{
public static void Main()
{
#pragma warning disable 162
if (MyEnum.three == MyEnum.two)
System.Console.WriteLine("Duplicate");
#pragma warning restore 162 // CS1635
}
}
CS1691 inträffar när ett nummer som skickas till #pragma warning direktivet inte är ett giltigt varningsnummer:
// CS1691.cs
public class C
{
int i = 1;
public static void Main()
{
C myC = new C();
#pragma warning disable 151 // CS1691
// Try the following line instead:
// #pragma warning disable 1645
myC.i++;
#pragma warning restore 151 // CS1691
// Try the following line instead:
// #pragma warning restore 1645
}
}
CS1692 inträffar när ett tal i förprocessordirektiv såsom #pragma och #line är ogiltigt om det är för stort, har fel format eller innehåller ogiltiga tecken:
// CS1692.cs
#pragma warning disable a // CS1692
// Try this instead:
// #pragma warning disable 1691
class A
{
static void Main()
{
}
}
Dessa direktiv är användbara för scenarier med villkorsstyrd kompilering där du vill varna utvecklare om specifika villkor i koden eller styra vilka varningar som visas under kompileringen. Mer information om hur du använder dessa direktiv finns i dokumentationen om förprocessordirektiv och #pragma varning.
#line och fildirektivsfel
- CS1560: Ogiltigt filnamn som angetts för förprocessordirektivet. Filnamnet är för långt eller inte ett giltigt filnamn.
- CS1576: Det radnummer som angetts för #line direktiv saknas eller är ogiltigt.
- CS1578: Filnamn, enradskommentar eller radslut förväntas.
- CS1694: Ogiltigt filnamn som angetts för förprocessordirektivet. Filnamnet är för långt eller inte ett giltigt filnamn.
- CS1695: Ogiltig #pragma kontrollsummasyntax. Bör vara #pragma kontrollsumma "filnamn" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX...".
- CS1709: Filnamnet som anges för förprocessordirektivet är tomt.
- CS8938: Värdet för #line-direktivet saknas eller ligger inom intervallet.
- CS8939: Slutpositionen för #line-direktivet måste vara större än eller lika med startpositionen.
- CS9028: Det #line span-direktivet kräver utrymme före den första parentesen, före teckenförskjutningen och före filnamnet.
Dessa fel indikerar felaktig användning av #line direktivet eller filrelaterade förprocessordirektiv. Vanliga orsaker är
- Ogiltiga eller saknade filnamn (CS1560, CS1694, CS1709).
- Felaktigt radnummerformat eller -värden (CS1576, CS8938, CS8939).
- Rätt syntax saknas för filnamn och kommentarer (CS1578).
-
#pragma checksumFelaktig syntax (CS1695). - Felaktigt avstånd i
#linespan-direktiv (CS9028).
CS1560/CS1694-exempel – Ogiltigt filnamn har angetts:
#line 100 "MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890.txt" // CS1560/CS1694 - filename too long
CS1576-exempel – Radnummer saknas eller är ogiltigt:
#line "abc.sc" // CS1576 - missing line number
#line abc "file.cs" // CS1576 - invalid line number format
Exempel på CS1578 – filnamn, kommentar eller radslut förväntades:
#line 101 abc.cs // CS1578 - filename not quoted
CS1695-exempel – Ogiltig #pragma kontrollsummasyntax:
#pragma checksum "12345" // CS1695 - missing GUID and checksum
CS1709-exempel – Tomt filnamn:
#pragma checksum "" "{406EA660-64CF-4C82-B6F0-42D48172A799}" "" // CS1709 - empty filename
CS8938-exempel – #line direktivvärde saknas eller ligger utom intervallet:
#line // CS8938 - missing value
#line 0 // CS8938 - out of range (must be 1-16,707,566)
CS8939-exempel – #line slutpositionsfel:
#line (1, 10) - (1, 5) "file.cs" // CS8939 - end column < start column
CS9028-exempel – #line avstånd mellan direktiv:
#line(1, 1) - (1, 10)"file.cs" // CS9028 - missing spaces
Åtgärda dessa fel genom att se till att dina #line direktiv och filrelaterade preprocessordirektiv följer rätt syntax enligt beskrivningen i dokumentationen om förprocessordirektiv.
Felaktig användning av filbaserade appdirektiv
-
CS9297:
#:direktiven kan inte vara efter första token i filen -
CS9298:
#:direktiv kan endast användas i filbaserade appar (-features:FileBasedProgram) -
CS9299:
#:-direktiven får inte förekomma efter#if-direktiven -
CS9314:
#!direktiv kan endast användas i skript eller filbaserade appar - CS9378: '#!' måste vara de första tecknen på den första raden i filen
Dessa fel indikerar att du använde direktiven #: eller #! felaktigt. Mer information om syntaxen för dessa direktiv finns i artikeln om förprocessordirektiv i avsnittet om filbaserade appar. Du kan också utforska filbaserade appar genom att följa självstudien om filbaserade appar.
En shebang (#!) väljer den körbara filen för ett skript eller en filbaserad app. Placera den vid det första tecknet på den första raden, före blanksteg, kommentarer eller tomma rader (CS9378); se vägledningen för filbaserat appdirektiv.
Filen innehåller script.cs direktiv
Följande fel indikerar felaktig användning eller placering av C#-skriptdirektiv:
- CS7009: Det går inte att använda #r efter den första token i filen
- CS7010: Det angivna filnamnet förväntas
- CS7011: #r tillåts endast i skript
- CS8097: #load tillåts endast i skript
- CS8098: Det går inte att använda #load efter den första token i filen
I ett C#-skript (.csx) skapar ett #load direktiv efter en token CS8098:
System.Console.WriteLine("This is the first token.");
#load "helpers.csx" // CS8098
Åtgärda CS8098 genom att flytta varje #load direktiv före varje token i skriptet:
#load "helpers.csx"
System.Console.WriteLine("The directive precedes the first token.");
I en vanlig C#-källfil (.cs) #load tillåts inte. Det relaterade villkoret genererar CS8097, inte CS8098. Ta bort #load från vanliga källfiler.