컴파일러는 전처리기 지시문을 잘못 사용하는 경우 다음과 같은 오류를 생성합니다.
- 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: 'number'가 유효한 경고 번호가 아닙니다.
- 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 checksum "filename" "{XXXXXXXX-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 지시문이 포함되어 있습니다.
다음 오류는 컴파일된 C# 파일의 script.cs 구문을 나타냅니다.
- CS7009: 파일의 첫 번째 토큰 후 #r 사용할 수 없습니다.
- CS7010: 따옴표 붙은 파일 이름이 필요합니다.
- CS7011: #r 스크립트에서만 허용됩니다.
- CS8097: #load 스크립트에서만 허용됩니다.
이러한 지시문은 컴파일된 C#에서 지원되지 않습니다. 제거하거나 script.cs 사용해야 합니다.
.NET