Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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#ifRichtlinie 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 checksumSyntax (CS1695). - Unzureichender Abstand in
#lineSpan-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#ifder 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.