Freigeben über


Vorprozessorfehler und Warnungen

Der Compiler generiert die folgenden Fehler für die falsche Verwendung von Präprozessordirektiven:

  • CS1024: Präprozessordirektive erwartet
  • CS1025: Einzeiliger Kommentar oder Zeilenende erwartet
  • CS1027: #endif Anweisung erwartet
  • CS1028: Unerwartete Präprozessordirektive
  • CS1029: #error: "text"
  • CS1030: #Warnung: "text"
  • CS1032: Präprozessorsymbole können nach dem ersten Token in der Datei nicht definiert oder aufgehoben werden.
  • CS1038: #endregion-Direktive erwartet
  • CS1040: Präprozessordirektiven müssen als erstes Nicht-Leerzeichen in einer Zeile angezeigt werden.
  • CS1517: Ungültiger Präprozessorausdruck
  • CS1560: Ungültiger Dateiname, der für die Präprozessordirektive angegeben wurde. Dateiname ist zu lang oder kein gültiger Dateiname.
  • CS1576: Die für #line Direktive angegebene Zeilennummer fehlt oder ist ungültig.
  • CS1578: Dateiname, Einzeilenkommentar oder Ende der Zeile erwartet
  • CS1633: Nicht erkannte #pragma-Direktive
  • CS1634: Deaktivieren oder Wiederherstellen erwartet
  • CS1635: Warnung "Warnungscode" kann nicht wiederhergestellt werden, da sie global deaktiviert wurde
  • CS1691: "Zahl" ist keine gültige Warnnummer.
  • CS1692: Ungültige Nummer
  • CS1694: Ungültiger Dateiname, der für die Präprozessordirektive angegeben wurde. Dateiname ist zu lang oder kein gültiger Dateiname.
  • CS1695: Ungültige #pragma Prüfsummensyntax; sollte #pragma Prüfsumme "Dateiname" "{XXXXXXXX-XXXXXX-XXXX-XXXXXXXX}" "XXXX..." sein.
  • CS1696: Einzeiliges Kommentar oder Ende der Zeile erwartet
  • CS1709: Der für die Präprozessordirektive angegebene Dateiname ist leer.
  • CS7009: Kann #r nach dem ersten Token in der Datei nicht verwenden
  • CS7010: Name der zitierten Datei erwartet
  • CS7011: #r ist nur in Skripts zulässig.
  • CS8097: #load ist nur in Skripts zulässig.
  • CS8098: #load kann nach dem ersten Token in der Datei nicht verwendet werden.
  • CS8938: Der #line-Direktivenwert fehlt oder liegt außerhalb des Bereichs.
  • CS8939: Die Endposition der #line Richtlinie muss größer oder gleich der Anfangsposition sein.
  • CS8996: Rohzeichenfolgenliterale sind in Präprozessordirektiven nicht zulässig.
  • CS9028: Die #line Span-Direktive erfordert Vor der ersten Klammer, vor dem Zeichenoffset und vor dem Dateinamen Leerzeichen.
  • CS9297: #: Direktiven können nicht nach dem ersten Token in der Datei sein
  • CS9298: #: Direktiven können nur in dateibasierten Programmen verwendet werden (-features:FileBasedProgram)
  • CS9299: #: Richtlinien dürfen nicht auf die #if Richtlinie folgen
  • CS9314: #! Direktiven können nur in Skripts oder dateibasierten Programmen verwendet werden.

Ungültige Präprozessordirektivesyntax

  • CS1024: Präprozessordirektive erwartet
  • CS1025: Einzeiliger Kommentar oder Zeilenende erwartet
  • CS1027: #endif Direktive erwartet
  • CS1028: Unerwartete Präprozessordirektive
  • CS1038: #endregion Richtlinie erwartet
  • CS1040: Präprozessordirektiven müssen als erstes Nicht-Leerzeichen in einer Zeile angezeigt werden.
  • CS1517: Ungültiger Präprozessorausdruck
  • CS1633: Nicht erkannte #pragma-Direktive
  • CS1696: Einzeiliges Kommentar oder Ende der Zeile erwartet
  • CS8996: Rohe Zeichenfolgenliterale sind in Präprozessordirektiven nicht zulässig.

Diese Fehler deuten darauf hin, dass Sie für Präprozessordirektiven ungültige Syntax verwendet haben. Häufige Ursachen sind:

  • Verwendung einer nicht erkannten Direktive nach # (CS1024, CS1633).
  • Einschließen von mehrzeiligen Kommentaren zu Direktiven (CS1025, CS1696).
  • Verwenden von Direktiven an unerwarteten Orten (CS1028).
  • Fehlende erforderliche Übereinstimmungsdirektiven (CS1027, CS1038).
  • Fehler beim Definieren oder Rückgängigmachen von Symbolen als erstes Element in der Datei (CS1032)
  • Die Direktive wird nicht als erstes Token in einer Zeile (CS1040) platziert.
  • Verwenden ungültiger Ausdrücke in der bedingten Kompilierung (CS1517).
  • Verwenden von unformatierten Zeichenfolgenliteralen in Präprozessordirektiven (CS8996).

CS1024-Beispiel – Präprozessordirektive erwartet:

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

CS1025-Beispiel – Einzeiliger Kommentar oder Zeilenende erwartet:

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

CS1027 Beispiel: #endif-Anweisung erwartet:

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

CS1028-Beispiel – Unerwartete Präprozessordirektive:

#endif   // CS1028 - no matching #if

CS1032-Beispiel – #define und #undef Präprozessordirektiven müssen vor anderen Token angezeigt werden:

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

CS1038-Beispiel – #endregion Direktive erwartet:

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

CS1040-Beispiel : Präprozessordirektiven müssen als erstes Nicht-Leerzeichen angezeigt werden:

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

CS1517-Beispiel – Ungültiger Präprozessorausdruck:

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

CS1633-Beispiel – Nicht erkannte #pragma Direktive:

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

CS8996-Beispiel : Unformatierte Zeichenfolgenliterale sind in Präprozessordirektiven nicht zulässig:

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

Bitte verwenden Sie zum Beheben dieses Fehlers ein reguläres Stringliteral.

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

Um diese Fehler zu beheben, stellen Sie sicher, dass Ihre Präprozessordirektiven die richtigen Syntaxregeln befolgen, die in der Dokumentation der Präprozessordirektiven beschrieben sind.

Fehler bei #error- und #warning-Direktiven

  • CS1029: #error: "text"
  • CS1030: #warning: "text"
  • CS1634: Deaktivieren oder Wiederherstellen erwartet
  • CS1635: Warnung "Warnungscode" kann nicht wiederhergestellt werden, da sie global deaktiviert wurde
  • CS1691: "Zahl" ist keine gültige Warnnummer.
  • CS1692: Ungültige Nummer

Diese Fehler treten auf, wenn der Compiler die #error, #warning und #pragma warning direktiven verarbeitet. Mit diesen Direktiven können Sie benutzerdefinierte Fehler- und Warnmeldungen während der Kompilierung generieren und das Warnungsverhalten steuern.

CS1029 zeigt den Text eines mit der #error Direktive definierten Fehlers an:

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

Bei der Kompilierung wird die folgende Ausgabe erzeugt:

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

CS1030 zeigt den Text einer Warnung an, die mit der #warning Direktive definiert ist:

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

Bei der Kompilierung wird die folgende Ausgabe erzeugt:

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

CS1634 tritt auf, wenn eine #pragma warning Klausel schlecht gebildet wird, wie zum Beispiel wenn deaktivieren oder wiederherstellen ausgelassen werden.

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

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

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

CS1635 tritt auf, wenn Sie die /nowarn Befehlszeilenoption oder Projekteinstellung verwenden, um eine Warnung global zu deaktivieren, aber versuchen, diese Warnung mit #pragma warning restore wiederherzustellen.

// 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 tritt auf, wenn eine an die #pragma warning Direktive übergebene Nummer keine gültige Warnnummer ist:

// 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 tritt auf, wenn eine Zahl in Präprozessordirektiven wie #pragma und #line ungültig ist, da sie zu groß, im falschen Format oder unzulässige Zeichen enthält:

// CS1692.cs

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

class A
{
    static void Main()
    {
    }
}

Diese Direktiven sind nützlich für Szenarien zur bedingten Kompilierung, in denen Sie Entwickler über bestimmte Bedingungen im Code informieren oder steuern möchten, welche Warnungen während der Kompilierung angezeigt werden. Weitere Informationen zur Verwendung dieser Direktiven finden Sie in der Dokumentation der Präprozessordirektiven und #pragma Warnung.

#line und Fehler bei Dateidirektiven

  • CS1560: Ungültiger Dateiname, der für die Präprozessordirektive angegeben wurde. Dateiname ist zu lang oder kein gültiger Dateiname.
  • CS1576: Die für #line Direktive angegebene Zeilennummer fehlt oder ist ungültig.
  • CS1578: Dateiname, Einzeilenkommentar oder Zeilenende erwartet
  • CS1694: Ungültiger Dateiname, der für die Präprozessordirektive angegeben wurde. Dateiname ist zu lang oder kein gültiger Dateiname.
  • CS1695: Ungültige #pragma Prüfsummensyntax; sollte #pragma Prüfsumme "Dateiname" "{XXXXXXXX-XXXX-XXXX-XXXXXX-XXXXXX}" "XXXX..." sein.
  • CS1709: Der für die Präprozessordirektive angegebene Dateiname ist leer.
  • CS8938: Der #line Direktivenwert fehlt oder liegt außerhalb des Bereichs.
  • CS8939: Die Endposition der #line Richtlinie muss größer oder gleich der Anfangsposition sein.
  • CS9028: Die #line-Span-Direktive erfordert Leerzeichen vor der ersten Klammer, vor dem Zeichenoffset und vor dem Dateinamen.

Diese Fehler deuten auf eine falsche Verwendung der #line Direktiven oder dateibezogenen Präprozessordirektiven hin. Häufige Ursachen sind:

  • Ungültige oder fehlende Dateinamen (CS1560, CS1694, CS1709).
  • Falsches Zeilennummernformat oder falsche Werte (CS1576, CS8938, CS8939).
  • Fehlende richtige Syntax für Dateinamen und Kommentare (CS1578).
  • Falsch formatierte #pragma checksum Syntax (CS1695).
  • Unzureichender Abstand in #line Span-Direktiven (CS9028).

CS1560/CS1694-Beispiel – Ungültiger Dateiname angegeben:

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

CS1576-Beispiel - Zeilennummer fehlt oder ungültig:

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

CS1578-Beispiel – Dateiname, Kommentar oder Zeilenende erwartet:

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

CS1695-Beispiel – Ungültige #pragma Prüfsummensyntax:

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

CS1709-Beispiel - Leerer Dateiname:

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

CS8938-Beispiel - Fehlender #line Direktivenwert oder außerhalb des zulässigen Bereichs:

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

CS8939-Beispiel – #line-Endposition-Fehler:

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

CS9028-Beispiel – #line Direktivenabstand:

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

Um diese Fehler zu beheben, stellen Sie sicher, dass Ihre #line Direktiven und dateibezogenen Präprozessordirektiven die richtige Syntax befolgen, wie in der Dokumentation zu Präprozessordirektiven beschrieben.

Falsche Verwendung dateibasierter Apps-Direktiven

  • CS9297: #: Direktiven dürfen nicht hinter dem ersten Token in der Datei stehen
  • CS9298: #: Direktiven können nur in dateibasierten Programmen verwendet werden (-features:FileBasedProgram)
  • CS9299: #: Richtlinien können nicht nach #if der Richtlinie erfolgen
  • CS9314: #! Direktiven können nur in Skripts oder dateibasierten Programmen verwendet werden.

Diese Fehler deuten darauf hin, dass Sie die #: Direktiven für eine dateibasierte App falsch verwendet haben. Weitere Informationen zur Syntax für diese Direktiven finden Sie im Artikel zu Präprozessordirektiven im Abschnitt zu dateibasierten Apps. Sie können auch dateibasierte Apps erkunden, indem Sie dem Lernprogramm auf dateibasierten Apps folgen.

Datei enthält script.cs Direktiven

Die folgenden Fehler deuten auf script.cs Syntax in einer kompilierten C#-Datei hin:

  • CS7009: #r kann nach dem ersten Token in der Datei nicht verwendet werden.
  • CS7010: Name der zitierten Datei erwartet
  • CS7011: #r ist nur in Skripts zulässig.
  • CS8097: #load ist nur in Skripts zulässig

Diese Direktiven werden in kompilierten C# nicht unterstützt. Sie müssen sie entfernen oder script.cs verwenden.