Delen via


Preprocessorfouten en -waarschuwingen

De compiler genereert de volgende fouten voor onjuist gebruik van preprocessorrichtlijnen:

  • CS1024: Preprocessorrichtlijn verwacht
  • CS1025: Opmerking met één regel of einde van regel verwacht
  • CS1027: #endif richtlijn verwacht
  • CS1028: Onverwachte preprocessorrichtlijn
  • CS1029: #error: 'text'
  • CS1030: #warning: 'text'
  • CS1032: Kan preprocessorsymbolen na het eerste token in bestand niet definiëren/ongedaan maken
  • CS1038: #endregion richtlijn verwacht
  • CS1040: Preprocessor-instructies moeten worden weergegeven als het eerste niet-witruimteteken op een regel
  • CS1517: Ongeldige preprocessorexpressie
  • CS1560: Ongeldige bestandsnaam opgegeven voor preprocessorrichtlijn. Bestandsnaam is te lang of is geen geldige bestandsnaam
  • CS1576: Het regelnummer dat is opgegeven voor #line instructie ontbreekt of is ongeldig
  • CS1578: Bestandsnaam, opmerking met één regel of einde van regel verwacht
  • CS1633: De niet herkende #pragma-richtlijn
  • CS1634: Verwacht uitschakelen of herstellen
  • CS1635: Kan waarschuwing 'waarschuwingscode' niet herstellen omdat deze globaal is uitgeschakeld
  • CS1691: 'getal' is geen geldig waarschuwingsnummer
  • CS1692: ongeldig nummer
  • CS1694: Ongeldige bestandsnaam opgegeven voor preprocessorrichtlijn. Bestandsnaam is te lang of is geen geldige bestandsnaam
  • CS1695: Ongeldige #pragma checksum syntaxis; moet #pragma checksum "bestandsnaam" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX..."
  • CS1696: Opmerking met één regel of einde van regel verwacht
  • CS1709: Bestandsnaam opgegeven voor preprocessorrichtlijn is leeg
  • CS7009: Kan #r niet gebruiken na het eerste token in bestand
  • CS7010: Bestandsnaam tussen aanhalingstekens verwacht
  • CS7011: #r is alleen toegestaan in scripts
  • CS8097: #load is alleen toegestaan in scripts
  • CS8098: Kan #load niet gebruiken na het eerste token in bestand
  • CS8938: De #line richtlijnwaarde ontbreekt of valt buiten het bereik
  • CS8939: De eindpositie van de #line richtlijn moet groter dan of gelijk zijn aan de beginpositie
  • CS8996: Onbewerkte tekenreeksen zijn niet toegestaan in preprocessor-richtlijnen
  • CS9028: De #line span-instructie vereist ruimte vóór het eerste haakje, vóór de tekenverschuiving en vóór de bestandsnaam
  • CS9297: #: instructies mogen niet na het eerste token in bestand zijn
  • CS9298: #: richtlijnen kunnen alleen worden gebruikt in programma's op basis van bestanden (-features:FileBasedProgram)
  • CS9299: #: richtlijnen mogen niet na #if richtlijn vallen
  • CS9314: #! instructies kunnen alleen worden gebruikt in scripts of programma's op basis van bestanden

Ongeldige preprocessor-instructiesyntaxis

  • CS1024: Preprocessorrichtlijn verwacht
  • CS1025: Opmerking met één regel of einde van regel verwacht
  • CS1027: Richtlijn #endif verwacht
  • CS1028: Onverwachte preprocessorrichtlijn
  • CS1038: #endregion richtlijn verwacht
  • CS1040: Preprocessor-instructies moeten worden weergegeven als het eerste niet-witruimteteken op een regel
  • CS1517: Ongeldige preprocessorexpressie
  • CS1633: Niet herkende #pragma richtlijn
  • CS1696: Opmerking met één regel of einde van regel verwacht
  • CS8996: Letterlijke tekenreeksen zijn niet toegestaan in preprocessor-richtlijnen

Deze fouten geven aan dat u ongeldige syntaxis hebt gebruikt voor preprocessor-instructies. Veelvoorkomende oorzaken zijn onder andere:

  • Een niet-herkende directive gebruiken na # (CS1024, CS1633).
  • Inclusief opmerkingen met meerdere regels op richtlijnen (CS1025, CS1696).
  • Instructies gebruiken op onverwachte locaties (CS1028).
  • Ontbrekende vereiste overeenkomende richtlijnen (CS1027, CS1038).
  • Geen symbolen definiëren of ongedefinieerd laten als het eerste token in het bestand (CS1032)
  • Plaats de richtlijn niet als eerste token op een regel (CS1040).
  • Ongeldige expressies gebruiken in voorwaardelijke compilatie (CS1517).
  • Letterlijke ruwe tekenreeksen gebruiken in preprocessor-instructies (CS8996).

CS1024-voorbeeld - Preprocessorrichtlijn verwacht:

#import System   // CS1024 - "import" is not a valid directive

CS1025-voorbeeld: opmerking met één regel of einde van regel verwacht:

#if true /* hello  
*/   // CS1025 - multiline comment not allowed
#endif

CS1027-voorbeeld - #endif richtlijn verwacht:

#if true   // CS1027 - missing #endif
class Test { }

CS1028-voorbeeld - Onverwachte preprocessorrichtlijn:

#endif   // CS1028 - no matching #if

CS1032-voorbeeld - #define en #undef preprocessorrichtlijnen moeten worden geplaatst vóór andere tokens:

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

CS1038 voorbeeld - #endregion-richtlijn verwacht:

#region testing
class Test { }
// CS1038 - missing #endregion

CS1040-voorbeeld- Preprocessor-instructies moeten worden weergegeven als het eerste niet-witruimteteken:

/* Comment */ #define X   // CS1040 - directive not first on line

CS1517-voorbeeld - Ongeldige preprocessorexpressie:

#if 1           // CS1517 - numeric literals not allowed
#endif
#if ~symbol     // CS1517 - bitwise operators not allowed  
#endif

CS1633-voorbeeld - Niet-herkende #pragma-richtlijn:

#pragma unknown  // CS1633 - "unknown" is not a valid pragma

CS8996 voorbeeld: Onbewerkte letterlijke tekenreeksen zijn niet toegestaan in preprocessorrichtlijnen:

// CS8996.cs
#pragma checksum """raw_string""" "{406EA660-64CF-4C82-B6F0-42D48172A799}" "hash"  // CS8996
class Test { }

Gebruik een gewone letterlijke tekenreeks om deze fout op te lossen:

#pragma checksum "filename.cs" "{406EA660-64CF-4C82-B6F0-42D48172A799}" "hash"  // OK
class Test { }

Als u deze fouten wilt oplossen, moet u ervoor zorgen dat uw preprocessor-instructies de juiste syntaxisregels volgen die worden beschreven in de preprocessorrichtlijnendocumentatie.

#error en #warning richtlijnfouten

  • CS1029: #error: 'text'
  • CS1030: #waarschuwing: 'text'
  • CS1634: Verwacht uitschakelen of herstellen
  • CS1635: Kan waarschuwing 'waarschuwingscode' niet herstellen omdat deze globaal is uitgeschakeld
  • CS1691: 'getal' is geen geldig waarschuwingsnummer
  • CS1692: ongeldig nummer

Deze fouten treden op wanneer de compiler de #error, #warning, en #pragma warning instructies verwerkt. Met deze instructies kunt u aangepaste fout- en waarschuwingsberichten genereren tijdens het compileren en beheren van waarschuwingsgedrag.

CS1029 geeft de tekst weer van een fout die is gedefinieerd met de #error richtlijn:

// CS1029.cs
class Sample
{
   static void Main()
   {
      #error Let's give an error here   // CS1029
   }
}

Compilatie produceert de volgende uitvoer:

example.cs(9,8): error CS1029: #error: 'Let's give an error here   // CS1029  '

CS1030 geeft de tekst weer van een waarschuwing die is gedefinieerd met de #warning richtlijn:

// CS1030.cs
class Sample
{
   static void Main()
   {
      #warning Let's give a warning here
   }
}

Compilatie produceert de volgende uitvoer:

example.cs(6,16): warning CS1030: #warning: 'Let's give a warning here'

CS1634 treedt op wanneer een #pragma warning component slecht is gevormd, zoals wanneer uitschakelen of herstellen wordt weggelaten:

// CS1634.cs
// compile with: /W:1

#pragma warning   // CS1634
// Try this instead:
// #pragma warning disable 0219

class MyClass
{
  public static void Main()
  {
  }
}

CS1635 treedt op wanneer u de /nowarn opdrachtregeloptie of projectinstelling gebruikt om een waarschuwing globaal uit te schakelen, maar u probeert deze waarschuwing opnieuw in te schakelen met #pragma warning restore:

// 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 treedt op wanneer een getal dat aan de #pragma warning richtlijn wordt doorgegeven, geen geldig waarschuwingsnummer is:

// 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 treedt op wanneer een getal in preprocessor-instructies zoals #pragma en #line ongeldig is omdat het te groot is, in de verkeerde indeling of ongeldige tekens bevat:

// CS1692.cs

#pragma warning disable a  // CS1692
// Try this instead:
// #pragma warning disable 1691

class A
{
    static void Main()
    {
    }
}

Deze richtlijnen zijn handig voor scenario's voor voorwaardelijke compilatie waarbij u ontwikkelaars wilt waarschuwen over specifieke voorwaarden in de code of bepalen welke waarschuwingen worden weergegeven tijdens de compilatie. Zie de documentatie voor preprocessorrichtlijnen en #pragma waarschuwing voor meer informatie over het gebruik van deze richtlijnen.

#line en fouten bij bestandsdirectieven

  • CS1560: Ongeldige bestandsnaam opgegeven voor preprocessorrichtlijn. Bestandsnaam is te lang of is geen geldige bestandsnaam
  • CS1576: Het regelnummer dat is opgegeven voor #line-instructie ontbreekt of is ongeldig
  • CS1578: Bestandsnaam, opmerking met één regel of einde van regel verwacht
  • CS1694: Ongeldige bestandsnaam opgegeven voor preprocessorrichtlijn. Bestandsnaam is te lang of is geen geldige bestandsnaam
  • CS1695: Ongeldige #pragma checksum syntaxis; moet #pragma checksum "bestandsnaam" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX}" "XXXX..."
  • CS1709: Bestandsnaam opgegeven voor preprocessorrichtlijn is leeg
  • CS8938: De #line richtlijnwaarde ontbreekt of valt buiten het bereik
  • CS8939: De eindpositie van de #line richtlijn moet groter zijn dan of gelijk zijn aan de beginpositie
  • CS9028: De #line spanrichtlijn vereist ruimte vóór het eerste haakje, vóór de tekenverplaatsing en vóór de bestandsnaam

Deze fouten geven een onjuist gebruik van de #line instructie of bestandsgerelateerde preprocessorrichtlijnen aan. Veelvoorkomende oorzaken zijn onder andere:

  • Ongeldige of ontbrekende bestandsnamen (CS1560, CS1694, CS1709).
  • Onjuist lijntnummerformaat of -waarden (CS1576, CS8938, CS8939).
  • Ontbrekende juiste syntaxis voor bestandsnamen en opmerkingen (CS1578).
  • Ongeldige #pragma checksum syntaxis (CS1695).
  • Onjuiste afstand in #line spanrichtlijnen (CS9028).

CS1560/CS1694-voorbeeld - Ongeldige bestandsnaam opgegeven:

#line 100 "MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890.txt"   // CS1560/CS1694 - filename too long

CS1576-voorbeeld - Regelnummer ontbreekt of is ongeldig:

#line "abc.sc"         // CS1576 - missing line number
#line abc "file.cs"    // CS1576 - invalid line number format

CS1578-voorbeeld - Bestandsnaam, opmerking of einde van regel verwacht:

#line 101 abc.cs   // CS1578 - filename not quoted

CS1695-voorbeeld: ongeldige syntaxis voor #pragma checksum:

#pragma checksum "12345"  // CS1695 - missing GUID and checksum

CS1709-voorbeeld - Lege bestandsnaam:

#pragma checksum "" "{406EA660-64CF-4C82-B6F0-42D48172A799}" ""  // CS1709 - empty filename

CS8938-voorbeeld - #line-richtlijnwaarde ontbreekt of is buiten bereik:

#line   // CS8938 - missing value
#line 0  // CS8938 - out of range (must be 1-16,707,566)

CS8939 voorbeeld - fout met de eindpositie van de regel:

#line (1, 10) - (1, 5) "file.cs"  // CS8939 - end column < start column

CS9028-voorbeeld: #line spanrichtlijn afstand

#line(1, 1) - (1, 10)"file.cs"  // CS9028 - missing spaces

Als u deze fouten wilt oplossen, moet u ervoor zorgen dat uw #line richtlijnen en bestandsgerelateerde preprocessorrichtlijnen de juiste syntaxis volgen, zoals beschreven in de documentatie voor preprocessorrichtlijnen.

Onjuist gebruik van richtlijnen voor apps op basis van bestanden

  • CS9297: #: instructies mogen niet na het eerste token in bestand zijn
  • CS9298: #: richtlijnen kunnen alleen worden gebruikt in programma's op basis van bestanden (-features:FileBasedProgram)
  • CS9299: #: richtlijnen mogen niet na #if richtlijn vallen
  • CS9314: #! instructies kunnen alleen worden gebruikt in scripts of programma's op basis van bestanden

Deze fouten geven aan dat u de #: instructies voor een op bestanden gebaseerde app onjuist hebt gebruikt. Meer informatie over de syntaxis voor deze instructies vindt u in het artikel over preprocessorrichtlijnen in de sectie over apps op basis van bestanden. U kunt ook op bestanden gebaseerde apps verkennen door de zelfstudie over op bestanden gebaseerde apps te volgen.

Bestand bevat script.cs instructies

De volgende fouten geven script.cs syntaxis in een gecompileerd C#-bestand aan:

  • CS7009: Kan #r niet gebruiken na het eerste token in bestand
  • CS7010: Verwachte bestandsnaam tussen aanhalingstekens
  • CS7011: #r is alleen toegestaan in scripts
  • CS8097: #load is alleen toegestaan in scripts

Deze instructies worden niet ondersteund in gecompileerde C#. U moet ze verwijderen of script.cs gebruiken.