Dela via


Fel och varningar för förprocessor

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
  • 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 program (-features:FileBasedProgram)
  • CS9299: #: direktiv får inte placeras efter #if direktiv
  • CS9314: #! direktiv kan endast användas i skript eller filbaserade program

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
  • 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).
  • Att inte definiera eller odefiniera symboler som 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:

/* Comment */ 
#define X   // CS1032 - directive not first token in file

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.

#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: Radnumret som anges för #line-direktivet 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 kontrollsumman "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: #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 checksum Felaktig syntax (CS1695).
  • Felaktigt avstånd i #line span-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

CS1578-exempel – Filnamn, kommentar eller radslut förväntas:

#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 program (-features:FileBasedProgram)
  • CS9299: #:-direktiven får inte förekomma efter #if-direktiven
  • CS9314: #! direktiv kan endast användas i skript eller filbaserade program

Dessa fel indikerar att du använde direktiven #: för en filbaserad app felaktigt. Du kan läsa mer om syntaxen för dessa direktiv 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.

Filen innehåller script.cs direktiv

Följande fel indikerar script.cs syntax i en kompilerad C#-fil:

  • 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

Dessa direktiv stöds inte i kompilerad C#. Du måste ta bort dem eller använda script.cs.