Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Компилятор создает следующие ошибки для неправильного использования директив препроцессора:
- CS1024: ожидаемая директива препроцессора
- CS1025: ожидается однострочный комментарий или конец строки
- CS1027: ожидается директива #endif
- CS1028: непредвиденная директива препроцессора
- CS1029: #error: "text"
- CS1030: #warning: "text"
- CS1032: не удается определить или отменить символы препроцессора после первого маркера в файле
- CS1038: ожидается директива #endregion
- CS1040: директивы препроцессора должны отображаться как первый символ, отличный от пробела в строке
- CS1517: недопустимое выражение препроцессора
- CS1560: недопустимое имя файла, указанное для директивы препроцессора. Имя файла слишком длинное или недопустимое имя файла
- CS1576: номер строки, указанный для директивы #line, отсутствует или недопустим
- CS1578: имя файла, однострочный комментарий или ожидаемый конец строки
- CS1633: неразпознанная директива #pragma
- CS1634: ожидаемое отключение или восстановление
- CS1635: не удается восстановить предупреждение "предупреждающий код", так как он был отключен глобально
- CS1691: 'номер' не является допустимым номером предупреждения
- CS1692: недопустимое число
- CS1694: недопустимое имя файла, указанное для директивы препроцессора. Имя файла слишком длинное или недопустимое имя файла
- CS1695: Некорректный синтаксис #pragma checksum; должно быть #pragma checksum "имя файла" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX..."
- CS1696: ожидается однострочный комментарий или конец строки
- CS1709: имя файла, указанное для директивы препроцессора, пусто
- CS7009: не удается использовать #r после первого маркера в файле
- CS7010: ожидается имя файла в кавычках
- CS7011: #r разрешено только в сценариях
- CS8097: #load разрешено только в сценариях
- CS8098: не удается использовать #load после первого маркера в файле
- CS8938: значение директивы #line отсутствует или не находится в допустимом диапазоне
- CS8939: положение конца директивы #line должно быть больше или равно начальной позиции.
- CS8996: необработанные строковые литералы не допускаются в директивах препроцессора
- CS9028: директива #line диапазона требует пробела перед первой скобкой, перед смещением символов и перед именем файла
-
CS9297:
#:директивы не могут быть после первого маркера в файле -
CS9298:
#:директивы могут использоваться только в файловых программах (-features:FileBasedProgram) -
CS9299:
#:директивы не могут быть после#ifдирективы -
CS9314:
#!директивы могут использоваться только в сценариях или файловых программах
Недопустимый синтаксис директивы препроцессора
- CS1024: ожидаемая директива препроцессора
- CS1025: ожидается однострочный комментарий или конец строки
- CS1027: ожидается директива #endif
- CS1028: непредвиденная директива препроцессора
- CS1038: ожидается директива #endregion
- CS1040: директивы препроцессора должны отображаться как первый символ, отличный от пробела в строке
- CS1517: недопустимое выражение препроцессора
- CS1633: Нераспознанная директива #pragma
- CS1696: ожидается однострочный комментарий или конец строки
- CS8996: необработанные строковые литералы не допускаются в директивах препроцессора
Эти ошибки указывают на то, что для директив препроцессора использовался недопустимый синтаксис. Наиболее вероятные причины:
- Использование нераспознанной директивы после
#(CS1024, CS1633). - Включая многострочные комментарии в строках директив (CS1025, CS1696).
- Использование директив в неожиданных местах (CS1028).
- Отсутствуют необходимые директивы сопоставления (CS1027, CS1038).
- Не определяя или неопределяя символы в качестве первого маркера в файле (CS1032)
- Неправильное размещение директивы в качестве первого токена в строке (CS1040).
- Использование недопустимых выражений в условной компиляции (CS1517).
- Использование необработанных строковых литералов в директивах препроцессора (CS8996).
Пример CS1024 — ожидаемая директива препроцессора:
#import System // CS1024 - "import" is not a valid directive
Пример CS1025 — ожидается однострочный комментарий или конец строки:
#if true /* hello
*/ // CS1025 - multiline comment not allowed
#endif
Пример CS1027 — ожидается директива #endif:
#if true // CS1027 - missing #endif
class Test { }
Пример CS1028 — непредвиденная директива препроцессора:
#endif // CS1028 - no matching #if
Пример CS1032 — #define и #undef директивы препроцессора должны отображаться перед другими токенами:
/* Comment */
#define X // CS1032 - directive not first token in file
Пример CS1038 — ожидается директива #endregion:
#region testing
class Test { }
// CS1038 - missing #endregion
Пример CS1040. Директивы препроцессора должны отображаться как первый символ, отличный от пробела:
/* Comment */ #define X // CS1040 - directive not first on line
Пример CS1517 — недопустимое выражение препроцессора:
#if 1 // CS1517 - numeric literals not allowed
#endif
#if ~symbol // CS1517 - bitwise operators not allowed
#endif
Пример CS1633 — нераспознанная директива #pragma:
#pragma unknown // CS1633 - "unknown" is not a valid pragma
Пример CS8996. Необработанные строковые литералы не допускаются в директивах препроцессора:
// CS8996.cs
#pragma checksum """raw_string""" "{406EA660-64CF-4C82-B6F0-42D48172A799}" "hash" // CS8996
class Test { }
Чтобы устранить эту ошибку, используйте обычный строковый литерал:
#pragma checksum "filename.cs" "{406EA660-64CF-4C82-B6F0-42D48172A799}" "hash" // OK
class Test { }
Чтобы устранить эти ошибки, убедитесь, что директивы препроцессора соответствуют правильным правилам синтаксиса, описанным в документации по директивам препроцессора.
ошибки директивы #error и #warning
- CS1029: #error: "text"
- CS1030: #warning: "text"
- CS1634: ожидаемое отключение или восстановление
- CS1635: не удается восстановить предупреждение "предупреждающий код", так как он был отключен глобально
- CS1691: "number" не является допустимым номером предупреждения
- CS1692: недопустимое число
Эти ошибки возникают, когда компилятор обрабатывает #error#warningи #pragma warning директивы. Эти директивы позволяют создавать пользовательские сообщения об ошибках и предупреждениях во время компиляции и управления предупреждениями.
CS1029 отображает текст ошибки, определенной директивой #error :
// CS1029.cs
class Sample
{
static void Main()
{
#error Let's give an error here // CS1029
}
}
В результате компиляции формируются следующие результаты:
example.cs(9,8): error CS1029: #error: 'Let's give an error here // CS1029 '
CS1030 отображает текст предупреждения, определенного директивой #warning :
// CS1030.cs
class Sample
{
static void Main()
{
#warning Let's give a warning here
}
}
В результате компиляции формируются следующие результаты:
example.cs(6,16): warning CS1030: #warning: 'Let's give a warning here'
CS1634 возникает, когда #pragma warning директива плохо сформирована, например, если пропущены команды отключения или восстановления.
// CS1634.cs
// compile with: /W:1
#pragma warning // CS1634
// Try this instead:
// #pragma warning disable 0219
class MyClass
{
public static void Main()
{
}
}
CS1635 возникает при использовании параметра командной строки или параметра проекта для глобального /nowarn отключения предупреждения, но используется #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 возникает, когда число, переданное #pragma warning директиве, не является допустимым номером предупреждения:
// 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 возникает, когда число в директивах препроцессора, например #pragma и #line недопустимо, так как оно слишком велико, в неправильном формате или содержит недопустимые символы:
// CS1692.cs
#pragma warning disable a // CS1692
// Try this instead:
// #pragma warning disable 1691
class A
{
static void Main()
{
}
}
Эти директивы полезны для сценариев условной компиляции, в которых разработчики хотят оповещать разработчиков о конкретных условиях в коде или контролировать, какие предупреждения отображаются во время компиляции. Дополнительные сведения об использовании этих директив см. в документации по директивам препроцессора и предупреждению #pragma.
#line и ошибки директив файла
- CS1560: недопустимое имя файла, указанное для директивы препроцессора. Имя файла слишком длинное или недопустимое имя файла
- CS1576: Указанный для директивы #line номер строки отсутствует или недопустим
- CS1578: имя файла, однострочный комментарий или ожидаемый конец строки
- CS1694: недопустимое имя файла, указанное для директивы препроцессора. Имя файла слишком длинное или недопустимое имя файла
- CS1695: недопустимый синтаксис #pragma контрольная сумма; следует #pragma контрольная сумма "имя_файла" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX..."
- CS1709: имя файла, указанное для директивы препроцессора, пусто
- CS8938: значение директивы #line отсутствует или выходит за пределы допустимого диапазона
- CS8939: положение конца директивы #line должно быть больше или равно начальной позиции.
- CS9028: директива #line диапазона требует пробела перед первой скобкой, перед смещением символов и перед именем файла
Эти ошибки указывают на неправильное #line использование директив или директив препроцессора, связанных с файлами. Наиболее вероятные причины:
- Недопустимые или отсутствующие имена файлов (CS1560, CS1694, CS1709).
- Неправильный формат номеров строк или значений (CS1576, CS8938, CS8939).
- Отсутствует правильный синтаксис для имен файлов и комментариев (CS1578).
- Неправильный
#pragma checksumсинтаксис (CS1695). - Неправильное интервалирование в
#lineдирективах диапазона (CS9028).
Пример CS1560/CS1694 — недопустимое имя файла:
#line 100 "MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890.txt" // CS1560/CS1694 - filename too long
Пример CS1576 — номер строки отсутствует или недопустим:
#line "abc.sc" // CS1576 - missing line number
#line abc "file.cs" // CS1576 - invalid line number format
Пример CS1578 — имя файла, комментарий или ожидаемый конец строки:
#line 101 abc.cs // CS1578 - filename not quoted
Пример CS1695 — недопустимый синтаксис контрольной суммы #pragma:
#pragma checksum "12345" // CS1695 - missing GUID and checksum
Пример CS1709 — пустое имя файла:
#pragma checksum "" "{406EA660-64CF-4C82-B6F0-42D48172A799}" "" // CS1709 - empty filename
Пример CS8938 — значение директивы #line отсутствует или выходит за пределы допустимого диапазона:
#line // CS8938 - missing value
#line 0 // CS8938 - out of range (must be 1-16,707,566)
Пример CS8939 — ошибка в позиции конца директивы #line:
#line (1, 10) - (1, 5) "file.cs" // CS8939 - end column < start column
Пример CS9028 — интервалы директив диапазона #line:
#line(1, 1) - (1, 10)"file.cs" // CS9028 - missing spaces
Чтобы устранить эти ошибки, убедитесь, что #line директивы и директивы препроцессора, связанные с файлами, соответствуют правильному синтаксису, как описано в документации по директивам препроцессора.
Неправильное использование директив приложений на основе файлов
-
CS9297:
#:директивы не могут быть после первого токена в файле -
CS9298:
#:директивы могут использоваться только в файловых программах (-features:FileBasedProgram) -
CS9299:
#:директива не может следовать за#ifдирективой -
CS9314:
#!директивы могут использоваться только в сценариях или файловых программах
Эти ошибки указывают на неправильное использование #: директив для приложения на основе файлов. Дополнительные сведения о синтаксисе этих директив см. в статье по директивам препроцессора в разделе о приложениях на основе файлов. Кроме того, вы можете изучить приложения на основе файлов, следуя руководству по приложениям на основе файлов.
Файл содержит директивы script.cs
Следующие ошибки указывают на синтаксические ошибки в скомпилированном файле script.cs C#.
- CS7009: не удается использовать #r после первого маркера в файле
- CS7010: ожидаемое имя файла с кавычками
- CS7011: #r разрешено только в сценариях
- CS8097: #load разрешено только в сценариях
Эти директивы не поддерживаются в скомпилированном C#. Их необходимо удалить или использовать script.cs.