Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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: #waarschuwing: 'tekst'
- 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
- CS8301: Ongeldige naam voor een voorverwerkingssymbool; 'symboolnaam' is geen geldige id
- 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 op bestanden gebaseerde apps (-features:FileBasedProgram) -
CS9299:
#:richtlijnen mogen niet na#ifrichtlijn vallen -
CS9314:
#!instructies kunnen alleen worden gebruikt in scripts of op bestanden gebaseerde apps - CS9378: '#!' moet de eerste tekens op de eerste regel van het bestand zijn
Ongeldige preprocessor-instructiesyntaxis
- CS1024: Preprocessorrichtlijn verwacht
- CS1025: Opmerking met één regel of einde van regel verwacht
- CS1027: Richtlijn #endif verwacht
- CS1028: Onverwachte preprocessorrichtlijn
- 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
- 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).
- Een
#define- of#undefrichtlijn na het eerste token in het bestand plaatsen (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:
class Test { }
#define X // CS1032 - directive appears after the first token
Als u deze fout wilt oplossen, plaatst u alle #define en #undef instructies vóór het eerste token in het bestand:
#define X
#undef Y
class Test { }
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.
Ongeldige namen van preprocessorsymbolen
- CS8301: Ongeldige naam voor een voorverwerkingssymbool; 'symboolnaam' is geen geldige id
Wanneer u programmatisch maakt CSharpParseOptions , geeft u elk symbool voor voorwaardelijke compilatie op als één id-vormige naam. Het eerste teken moet geldig zijn aan het begin van een C#-id en de resterende tekens moeten geldige id-tekens zijn. Roslyn accepteert ook trefwoordtekst als een symboolnaam, maar voeg geen voorvoegsel toe @ . Neem geen witruimte, interpunctie zoals . of -, een toewijzing zoals FEATURE=1of een volledige voorwaardelijke expressie op.
Een voorverwerkingssymbool registreert alleen of de naam ervan is gedefinieerd. Er wordt geen waarde opgeslagen. Ongeldige namen die zijn opgegeven via de projecteigenschap DefineConstants of de compileroptie -define resulteren in plaats daarvan in CS2029; zie DefineConstants.
#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. De 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. De bestandsnaam is te lang of is geen geldige bestandsnaam.
- CS1695: Ongeldige syntaxis voor #pragma checksum; moet zijn #pragma checksum "bestandsnaam" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX...".
- CS1709: Bestandsnaam die is 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 voor het eerste haakje, vóór het tekenverschil 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 checksumsyntaxis (CS1695). - Onjuiste afstand in
#linespanrichtlijnen (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 op bestanden gebaseerde apps (-features:FileBasedProgram) -
CS9299:
#:richtlijnen mogen niet na#ifrichtlijn vallen -
CS9314:
#!instructies kunnen alleen worden gebruikt in scripts of op bestanden gebaseerde apps - CS9378: '#!' moet de eerste tekens op de eerste regel van het bestand zijn
Deze fouten geven aan dat u de #: of #! instructies onjuist hebt gebruikt. Zie het artikel over preprocessorrichtlijnen in de sectie over apps op basis van bestanden voor meer informatie over de syntaxis voor deze instructies. U kunt ook apps op basis van bestanden verkennen door de zelfstudie over op bestanden gebaseerde apps te volgen.
Een shebang (#!) bepaalt welk uitvoerbaar programma wordt gebruikt voor een script of bestandsgebaseerde app. Plaats het op het eerste teken van de eerste regel, vóór een witruimte, opmerkingen of lege regels (CS9378); zie de richtlijnen voor app-richtlijnen op basis van bestanden.
Bestand bevat script.cs instructies
De volgende fouten geven een onjuist gebruik of plaatsing van C#-scriptrichtlijnen 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
- CS8098: Kan #load niet gebruiken na het eerste token in bestand
In een C#-script (.csx) produceert een #load instructie na een token CS8098:
System.Console.WriteLine("This is the first token.");
#load "helpers.csx" // CS8098
Als u CS8098 wilt herstellen, verplaatst u elke instructie vóór elk #load token in het script:
#load "helpers.csx"
System.Console.WriteLine("The directive precedes the first token.");
In een normaal C#-bronbestand (.cs) #load is dit niet toegestaan. Deze gerelateerde voorwaarde produceert CS8097, niet CS8098. Verwijderen #load uit reguliere bronbestanden.