次の方法で共有


プリプロセッサのエラーと警告

プリプロセッサ ディレクティブを誤って使用すると、コンパイラによって次のエラーが生成されます。

  • CS1024: プリプロセッサ ディレクティブが必要です
  • CS1025: 1 行のコメントまたは行末が必要です
  • 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 チェックサムの構文が無効です。正しい構文は #pragma checksum "filename" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX..." です
  • CS1696: 1 行のコメントまたは行末が必要です
  • CS1709: プリプロセッサ ディレクティブに指定されたファイル名が空です
  • CS7009: ファイル内の最初のトークンの後に #r を使用できません
  • CS7010: 引用符で囲まれたファイル名が必要です
  • CS7011: #r はスクリプトでのみ許可されます
  • CS8097: #load はスクリプトでのみ許可されます
  • CS8098: ファイル内の最初のトークンの後に #load を使用できません
  • CS8938: #line ディレクティブ値が見つからないか、範囲外です
  • CS8939: #line ディレクティブの終了位置は、開始位置以上である必要があります
  • CS8996: プリプロセッサ ディレクティブでは未加工の文字列リテラルは使用できません
  • CS9028: #line span ディレクティブには、最初のかっこの前、文字オフセットの前、およびファイル名の前にスペースが必要です
  • CS9297: #: ディレクティブは、ファイル内の最初のトークンの後にすることはできません
  • CS9298: #: ディレクティブは、ファイル ベースのプログラムでのみ使用できます (-features:FileBasedProgram)
  • CS9299: #if ディレクティブの後に#:ディレクティブを置くことはできません
  • CS9314: #! ディレクティブは、スクリプトまたはファイル ベースのプログラムでのみ使用できます

プリプロセッサ ディレクティブの構文が無効です

  • CS1024: プリプロセッサ ディレクティブが必要です
  • CS1025: 1 行のコメントまたは行末が必要です
  • CS1027: #endif ディレクティブが必要です
  • CS1028: 予期しないプリプロセッサ ディレクティブ
  • CS1038: #endregion ディレクティブが必要です
  • CS1040: プリプロセッサ ディレクティブは、行の最初の空白以外の文字として使用する必要があります
  • CS1517: プリプロセッサ式が無効です
  • CS1633: 認識されない #pragma ディレクティブ
  • CS1696: 1 行のコメントまたは行末が必要です
  • CS8996: プリプロセッサ ディレクティブでは未加工の文字列リテラルは使用できません

これらのエラーは、 プリプロセッサ ディレクティブに無効な構文を使用したことを示しています。 一般的な原因には、次のようなものがあります。

  • #後に認識されないディレクティブを使用する (CS1024、CS1633)。
  • ディレクティブ行に複数行コメントを含める (CS1025、CS1696)。
  • 予期しない場所でのディレクティブの使用 (CS1028)。
  • 必要な一致ディレクティブがない (CS1027、CS1038)。
  • ファイル内の最初のトークンとしてシンボルを定義または未定義にしない (CS1032)
  • ディレクティブを行の最初のトークンとして配置しない (CS1040)。
  • 条件付きコンパイルで無効な式を使用する (CS1517)。
  • プリプロセッサ ディレクティブで生の文字列リテラルを使用する (CS8996)。

CS1024 の例 - プリプロセッサ ディレクティブが必要です。

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

CS1025 の例 - 1 行のコメントまたは行末が必要です。

#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 checksum の構文が無効です。「#pragma checksum "filename" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX..."」の形式にする必要があります。
  • CS1709: プリプロセッサ ディレクティブに指定されたファイル名が空です
  • CS8938: #line ディレクティブ値が見つからないか、範囲外です
  • CS8939: #line ディレクティブの終了位置は、開始位置以上である必要があります
  • CS9028: #line span ディレクティブには、最初のかっこの前、文字オフセットの前、ファイル名の前にスペースが必要です

これらのエラーは、 #line ディレクティブ またはファイル関連プリプロセッサ ディレクティブが正しく使用されていないことを示しています。 一般的な原因には、次のようなものがあります。

  • ファイル名が無効または不足しています (CS1560、CS1694、CS1709)。
  • 行番号の形式または値が正しくありません (CS1576、CS8938、CS8939)。
  • ファイル名とコメントの適切な構文がありません (CS1578)。
  • 形式が正しくない #pragma checksum 構文 (CS1695)。
  • #line span ディレクティブ (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を使用する必要があります。