다음을 통해 공유


전처리기 오류 및 경고

컴파일러는 전처리기 지시문을 잘못 사용하는 경우 다음과 같은 오류를 생성합니다.

  • 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 사용해야 합니다.