Megosztás a következőn keresztül:


Előfeldolgozási hibák és figyelmeztetések

A fordító a következő hibákat generálja az előfeldolgozási irányelvek helytelen használatához:

  • CS1024: Az előfeldolgozóra vonatkozó irányelv várható
  • CS1025: Egysoros megjegyzés vagy sorvég várható
  • CS1027: a #endif direktíva várható
  • CS1028: Váratlan előfeldolgozási irányelv
  • CS1029: #error: "text"
  • CS1030: #warning: „text”
  • CS1032: Nem definiálhatók/nem határozhatók meg az előfeldolgozó szimbólumok a fájl első tokenje után
  • CS1038: #endregion irányelv várható
  • CS1040: Az előfeldolgozási direktíváknak a sor első nem térközű karaktereként kell szerepelniük
  • CS1517: Érvénytelen előfeldolgozási kifejezés
  • CS1560: Az előfeldolgozási irányelvhez megadott fájlnév érvénytelen. A fájlnév túl hosszú vagy nem érvényes fájlnév
  • CS1576: A #line irányelvhez megadott sorszám hiányzik vagy érvénytelen
  • CS1578: Fájlnév, egysoros megjegyzés vagy sorvég várható
  • CS1633: Ismeretlen #pragma irányelv
  • CS1634: Várható letiltás vagy visszaállítás
  • CS1635: A figyelmeztetési kód nem állítható vissza, mert globálisan le lett tiltva
  • CS1691: A "szám" nem érvényes figyelmeztető szám
  • CS1692: Érvénytelen szám
  • CS1694: Az előfeldolgozási irányelvhez megadott fájlnév érvénytelen. A fájlnév túl hosszú vagy nem érvényes fájlnév
  • CS1695: Érvénytelen #pragma checksum szintaxisa; helyesen: #pragma checksum "filename" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX..."
  • CS1696: Egysoros megjegyzés vagy sorvég várható
  • CS1709: Az előfeldolgozási direktívához megadott fájlnév üres
  • CS7009: A fájl első jelszóeleme után nem használható #r
  • CS7010: Idézett fájlnév várható
  • CS7011: #r csak szkriptekben engedélyezett
  • CS8097: #load csak szkriptekben engedélyezett
  • CS8098: A fájl első karaktere után nem használható a #load
  • CS8938: A #line irányelv értéke hiányzik vagy a tartományon kívül esik
  • CS8939: A #line irányelv zárópozíciójának nagyobbnak vagy egyenlőnek kell lennie a kezdő pozíciónál
  • CS8996: A nyers karakterlánc literálok nem engedélyezettek az előfeldolgozási irányelvekben
  • CS9028: A #line span direktíva szóközt igényel az első zárójel előtt, a karakter eltolása előtt és a fájlnév előtt
  • CS9297: #: az irányelvek nem lehetnek a fájl első tokenje után
  • CS9298: #: az irányelvek csak fájlalapú programokban használhatók (-features:FileBasedProgram)
  • CS9299: A #: irányelvek nem követhetik a #if irányelvet
  • CS9314: #! az irányelvek csak szkriptekben vagy fájlalapú programokban használhatók

Érvénytelen előfeldolgozási irányelv szintaxisa

  • CS1024: Az előfeldolgozóra vonatkozó irányelv várható
  • CS1025: Egysoros megjegyzés vagy sorvég várható
  • CS1027: #endif irányelv várható
  • CS1028: Váratlan előfeldolgozási irányelv
  • CS1038: #endregion irányelv várható
  • CS1040: Az előfeldolgozási direktíváknak a sor első nem térközű karaktereként kell megjelennie
  • CS1517: Érvénytelen előfeldolgozási kifejezés
  • CS1633: Ismeretlen #pragma irányelv
  • CS1696: Egysoros megjegyzés vagy sorvég várható
  • CS8996: A nyers karakterláncliterálok nem engedélyezettek az előfeldolgozási utasításokban

Ezek a hibák azt jelzik, hogy érvénytelen szintaxist használt az előfeldolgozási irányelvekhez. A gyakori kiváltó okok között a következőket találjuk:

  • Az # után ismeretlen irányelv használata (CS1024, CS1633).
  • Többsoros megjegyzések belefűzve az irányelvsorokra (CS1025, CS1696).
  • Irányelvek használata váratlan helyeken (CS1028).
  • Hiányoznak a szükséges egyező irányelvek (CS1027, CS1038).
  • Szimbólumok nem lehetnek definiálva vagy törölve az első tokenként a fájlban (CS1032)
  • Az utasítás nem kerül sorra mint sor első eleme (CS1040).
  • Érvénytelen kifejezések használata feltételes fordításban (CS1517).
  • Nyers sztringkonstansok használata az előfeldolgozási irányelvekben (CS8996).

CS1024-példa – Az előfeldolgozóra vonatkozó irányelv várható:

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

CS1025-példa – Egysoros megjegyzés vagy sorvég várható:

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

CS1027-példa – #endif irányelv várható:

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

CS1028-példa – Váratlan előfeldolgozási irányelv:

#endif   // CS1028 - no matching #if

CS1032-példa – #define és #undef előprocesszor-irányelveknek más jogkivonatok előtt kell megjelennie:

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

CS1038-példa – #endregion irányelv várható:

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

CS1040-példa – Az előfeldolgozási irányelveknek az első nem üres szóköz karakterként kell megjelennie:

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

CS1517-példa – Érvénytelen előfeldolgozó kifejezés:

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

CS1633-példa – Ismeretlen #pragma irányelv:

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

CS8996 példa – A szó szerinti karaktersorozatok nem engedélyezettek az előfeldolgozó utasításokban:

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

A hiba kijavításához használjon egy normál sztringkonstanst:

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

A hibák kijavításához győződjön meg arról, hogy az előfeldolgozási irányelvek az előfeldolgozási irányelvek dokumentációjában leírt helyes szintaxisszabályokat követik.

#error és #warning direktíva hiba

  • CS1029: #error: "text"
  • CS1030: #warning: "text"
  • CS1634: Várható letiltás vagy visszaállítás
  • CS1635: A figyelmeztetési kód nem állítható vissza, mert globálisan le lett tiltva
  • CS1691: A "szám" nem érvényes figyelmeztető szám
  • CS1692: Érvénytelen szám

Ezek a hibák akkor fordulnak elő, amikor a fordító feldolgozza a #error, #warning és #pragma warning irányelveket. Ezek az irányelvek lehetővé teszik egyéni hibaüzenetek és figyelmeztető üzenetek generálására a fordítás és a figyelmeztetési viselkedés szabályozása során.

A CS1029 megjeleníti az irányelvvel definiált hiba szövegét #error :

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

A fordítás a következő kimenetet hozza létre:

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

A CS1030 megjeleníti az irányelvvel definiált figyelmeztetés szövegét #warning :

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

A fordítás a következő kimenetet hozza létre:

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

A CS1634 akkor fordul elő, ha egy #pragma warning záradék hibásan van formázva, például ha a letiltás vagy a visszaállítás nincs megadva:

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

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

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

A CS1635 akkor fordul elő, ha a /nowarn parancssori opció vagy projekt beállítást használ egy figyelmeztetés globális letiltására, de a #pragma warning restore kapcsolót a figyelmeztetés visszaállítására használja:

// 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
    }
}

A CS1691 akkor fordul elő, ha az #pragma warning irányelvnek átadott szám nem érvényes figyelmeztető szám:

// 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
    }
}

A CS1692 akkor fordul elő, ha az előfeldolgozási irányelvekben #pragma#line szereplő szám érvénytelen, mert túl nagy, nem megfelelő formátumban van, vagy érvénytelen karaktereket tartalmaz:

// CS1692.cs

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

class A
{
    static void Main()
    {
    }
}

Ezek az irányelvek olyan feltételes fordítási helyzetekben hasznosak, amikor a fejlesztőket a kód meghatározott feltételeiről szeretné értesíteni, vagy szabályozni, hogy mely figyelmeztetések jelenjenek meg a fordítás során. Az irányelvek használatával kapcsolatos további információkért tekintse meg az előfeldolgozási irányelvek dokumentációját és #pragma figyelmeztetést.

#line és fájlirányelmezési hibák

  • CS1560: Az előfeldolgozási irányelvhez megadott fájlnév érvénytelen. A fájlnév túl hosszú vagy nem érvényes fájlnév
  • CS1576: A #line irányelvhez megadott sorszám hiányzik vagy érvénytelen
  • CS1578: Fájlnév, egysoros megjegyzés vagy sorvég várható
  • CS1694: Az előfeldolgozási irányelvhez megadott fájlnév érvénytelen. A fájlnév túl hosszú vagy nem érvényes fájlnév
  • CS1695: Érvénytelen #pragma ellenőrzőösszeg szintaxisa; a #pragma ellenőrzőösszeg formátuma "fájlnév" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX..." legyen
  • CS1709: Az előfeldolgozási direktívához megadott fájlnév üres
  • CS8938: A #line irányelv értéke hiányzik vagy a tartományon kívül esik
  • CS8939: A #line irányelv zárópozíciójának nagyobbnak vagy egyenlőnek kell lennie a kezdő pozíciónál
  • CS9028: A #line span direktíva szóközt igényel az első zárójel előtt, a karakter eltolása előtt és a fájlnév előtt

Ezek a hibák az irányelv vagy a #line fájlhoz kapcsolódó előfeldolgozási irányelvek helytelen használatát jelzik. A gyakori kiváltó okok között a következőket találjuk:

  • Érvénytelen vagy hiányzó fájlnevek (CS1560, CS1694, CS1709).
  • Helytelen sorszámformátum vagy értékek (CS1576, CS8938, CS8939).
  • Hiányzik a fájlnevek és megjegyzések megfelelő szintaxisa (CS1578).
  • Hibás szintaxis #pragma checksum (CS1695).
  • Nem megfelelő térköz a span irányelvekben #line (CS9028).

CS1560/CS1694 példa – Érvénytelen fájlnév van megadva:

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

CS1576-példa – Hiányzó vagy érvénytelen sorszám:

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

CS1578-példa – Fájlnév, megjegyzés vagy sorvég várható:

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

CS1695-példa – Érvénytelen #pragma ellenőrzőösszeg szintaxisa:

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

CS1709-példa – Üres fájlnév:

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

CS8938 példa – #line irányelv értéke hiányzik vagy tartományon kívül esik:

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

CS8939 példa – hibás #line pozíció végének:

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

CS9028 példa – #line tartomány direktíva hézag:

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

A hibák kijavításához győződjön meg arról, hogy az #line irányelvek és a fájlhoz kapcsolódó előfeldolgozási irányelvek a megfelelő szintaxist követik az előfeldolgozási irányelvek dokumentációjában leírtak szerint.

A fájlalapú alkalmazásokra vonatkozó irányelvek helytelen használata

  • CS9297: #: az irányelvek nem lehetnek az első token után a fájlban
  • CS9298: #: az irányelvek csak fájlalapú programokban használhatók (-features:FileBasedProgram)
  • CS9299: A #: irányelvek nem lehetnek a #if irányelv után
  • CS9314: #! az irányelvek csak szkriptekben vagy fájlalapú programokban használhatók

Ezek a hibák azt jelzik, hogy helytelenül használta a #: fájlalapú alkalmazásokra vonatkozó irányelveket. Ezen irányelvek szintaxisáról a fájlalapú alkalmazásokról szóló szakaszban, az előfeldolgozási irányelvekről szóló cikkben talál további információt. A fájlalapú alkalmazások megismeréséhez kövesse a fájlalapú alkalmazásokra vonatkozó oktatóanyagot .

A fájl script.cs irányelveket tartalmaz

A következő hibák script.cs szintaxist jeleznek egy lefordított C#-fájlban:

  • CS7009: Nem lehet használni a #r-t a fájl első szava után
  • CS7010: Idézett fájlnév várható
  • CS7011: #r csak szkriptekben engedélyezett
  • CS8097: #load csak szkriptekben engedélyezett

Ezek az irányelvek nem támogatottak a lefordított C#-ban. El kell távolítania őket, vagy script.cs kell használnia.