無効なコマンド ライン オプションとビルド構成のエラーと警告を解決する

この記事では、コンパイラの次のエラーと警告について説明します。

  • CS0006: メタデータ ファイル 'file' が見つかりませんでした
  • CS0007: 予期しない共通言語ランタイム初期化エラー - 'description'
  • CS0016: 出力ファイル 'file' に書き込めませんでした -- 'reason'
  • CS1564: 競合するオプションが指定されました: Win32 リソース ファイル。Win32 マニフェスト
  • CS1616: オプション 'option' は、ソース ファイルまたは追加されたモジュールで指定された属性 'attribute' をオーバーライドします
  • CS1668: 'option' で指定された検索パス 'path' が無効です -- 'reason'
  • CS1719: Win32 リソース ファイル 'file' を開くときにエラーが発生しました -- 'reason'
  • CS1773: /subsystemversion のバージョンが無効です。ARM または AppContainerExe の場合はバージョンが 6.02 以上、それ以外の場合は 4.00 以上である必要があります
  • CS2008: ソース ファイルが指定されていない。
  • CS2019: /target のターゲットの種類が無効です:'exe'、'winexe'、'library'、または 'module' を指定する必要があります
  • CS2029: 前処理シンボルの名前が無効です。'identifier' が有効な識別子ではありません
  • CS2032: コマンド ラインまたは応答ファイルで文字 'character' を使用できません
  • CS2036: /pdb オプションでは、/debug オプションも使用する必要があります
  • CS2038: 言語名 'name' が無効です。
  • CS2039: コマンド ライン構文エラー: オプション 'option' の Guid 形式 'value' が無効です
  • CS2040: コマンド ライン構文エラー: オプション 'option' の Guid がありません
  • CS2041: 無効な出力名: 名前
  • CS2042: デバッグ情報の形式が無効です: 形式
  • CS2043: 'id#' 構文はサポートされなくなりました。代わりに '$id' を使用してください。
  • CS2044: /sourcelink スイッチは、PDB を出力する場合にのみサポートされます。
  • CS2045: /embed スイッチは、PDB を出力する場合にのみサポートされます。
  • CS2046: コマンド ライン構文エラー: 'value' は 'option' オプションの有効な値ではありません。値は 'format' の形式である必要があります。
  • CS3012: CLS 準拠チェックを有効にするには、モジュールではなくアセンブリに CLSCompliant 属性を指定する必要があります
  • CS3013: アセンブリに一致させるには、追加されたモジュールを CLSCompliant 属性でマークする必要があります
  • CS7038: モジュール 'module' を出力できませんでした: エラー
  • CS8751: C# コンパイラの内部エラー。
  • CS8771: 出力ディレクトリを特定できませんでした
  • CS8772: stdin 引数 '-' が指定されていますが、標準入力ストリームから入力がリダイレクトされていません。

入力ファイルと出力ファイルのエラー

  • CS0006: メタデータ ファイル 'file' が見つかりませんでした
  • CS0016: 出力ファイル 'file' に書き込めませんでした -- 'reason'
  • CS1668: 'option' で指定された検索パス 'path' が無効です -- 'reason'
  • CS1719: Win32 リソース ファイル 'file' を開くときにエラーが発生しました -- 'reason'
  • CS2008: ソース ファイルが指定されていない。

これらのエラーは、コンパイルに必要なファイルがコンパイラで見つからない、読み取り、または書き込みできないことを示します。 ファイル関連のコンパイラ オプションの完全な一覧については、「 C# コンパイラ オプション - 入力C# コンパイラ オプション - リソース」を参照してください。

  • 参照または関連するオプションに渡されるパスが既存のアセンブリ (CS0006) を指し示されていることを確認します。 通常、このエラーは、プロジェクト ファイルまたはコマンド ラインのアセンブリ参照で、存在しないパスが指定されている場合に発生します。 入力ミスがないか確認し、参照先のプロジェクトがビルドされていることを確認し、ファイルが移動または削除されていないことを確認します。
  • 出力パスが存在し、書き込み可能であることを確認し、現在ファイルにロックが設定されていないプロセス (CS0016) を確認します。 たとえば、ビルド時に実行可能ファイルが実行されていないことを確認します。 以前にビルドされたファイルが既に場所にある場合は、読み取り専用ではないことを確認します。
  • AdditionalLibPaths または LIB 環境変数に指定したパスが存在し、アクセス可能であることを確認します (CS1668)。 単一引用符で囲まれたエラー メッセージには、パスが無効な理由を説明するオペレーティング システム エラーが含まれています。
  • Win32 リソース ファイル (CS1719) のエラー理由に記載されている問題を修正します。 最も一般的な原因は、"ファイルが見つかりません" (パスの確認) または "アクセスが拒否されました" (ファイルのアクセス許可の確認) です。
  • 少なくとも 1 つのソース コード ファイルをコンパイラ (CS2008) に渡します。 このエラーは、コンパイラ オプションを指定しても、 .cs ファイルを入力として指定しない場合に発生します。

無効なオプション値

  • CS1773: /subsystemversion のバージョンが無効です。ARM または AppContainerExe の場合はバージョンが 6.02 以上、それ以外の場合は 4.00 以上である必要があります
  • CS2019: /target のターゲットの種類が無効です:'exe'、'winexe'、'library'、または 'module' を指定する必要があります
  • CS2029: 前処理シンボルの名前が無効です。'identifier' が有効な識別子ではありません
  • CS2032: コマンド ラインまたは応答ファイルで文字 'character' を使用できません
  • CS2038: 言語名 'name' が無効です。
  • CS2039: コマンド ライン構文エラー: オプション 'option' の Guid 形式 'value' が無効です
  • CS2040: コマンド ライン構文エラー: オプション 'option' の Guid がありません
  • CS2041: 無効な出力名: 名前
  • CS2042: デバッグ情報の形式が無効です: 形式
  • CS2043: 'id#' 構文はサポートされなくなりました。代わりに '$id' を使用してください。
  • CS2046: コマンド ライン構文エラー: 'value' は 'option' オプションの有効な値ではありません。値は 'format' の形式である必要があります。
  • CS8772: stdin 引数 '-' が指定されていますが、標準入力ストリームから入力がリダイレクトされていません。

これらのエラーは、コンパイラ オプションに渡される値の形式が正しくないか、許可されている値のセット外であることを示します。 コンパイラ オプションの完全な一覧については、「 C# コンパイラ オプション」を参照してください。

  • SubsystemVersion オプション (CS1773) の有効なバージョン番号を指定します。 ARM ターゲットと AppContainerExe ターゲットには、バージョン 6.02 以上が必要です。その他のターゲットには 4.00 以上が必要です。
  • 有効な OutputType 値 ( exewinexelibrary、または module (CS2019) のいずれかを使用します。 /target オプションのその他の値は拒否されます。
  • DefineConstants に渡される前処理シンボルが有効な C# 識別子 (CS2029) であることを確認します。 識別子は、文字またはアンダースコアで始まり、文字、数字、またはアンダースコアのみを含む必要があります。 この警告は NoWarn オプションでは抑制できません。
  • コマンド ライン引数と| (CS2032) から ASCII 制御文字 (範囲 0 ~ 31) とパイプ () 文字を削除します。 コマンド ライン プロセッサと IDE では通常、これらの文字がフィルター処理されるため、このエラーは、無効な文字を含む応答ファイルを使用する場合に最も一般的に表示されます。 このエラーは、新しいバージョンのコンパイラによって生成されなくなりました。
  • コンパイラ (CS2038) によって認識される有効なカルチャ名を指定します。 サポートされているカルチャ名の一覧に対してスペル チェックを行います。
  • /checksumalgorithm (CS2039CS2040) など、必要なオプションに適切に書式設定された GUID を指定します。 GUID は標準の形式 (たとえば、 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) に従う必要があります。
  • 出力ファイル名 (CS2041) から無効な文字を削除します。 出力名には、ターゲット オペレーティング システムのファイル パスで無効な文字を含めることはできません。
  • 有効なデバッグ情報形式の値 (CS2042) を指定します。 使用できる値はコンパイラのバージョンによって異なります。通常、 fullpdbonlyportable、および embeddedが含まれます。
  • 従来の id# 構文を $id (CS2043) に置き換えます。 以前の構文は、コンパイラでサポートされなくなりました。
  • 指定したオプション (CS2046) の想定される形式に一致する値を指定します。 エラー メッセージは、想定される形式を示します。
  • - (stdin) 引数 (CS8772) を使用する場合は、標準入力をリダイレクトします。 コンパイラは、ソース ファイル引数として - を渡すときにパイプ入力を受け取ります。 パイプライン (たとえば、 cat file.cs | csc -) を使用するか、 - 引数を削除してソース ファイルを直接渡します。

競合または不足しているオプション

  • CS1564: 競合するオプションが指定されました: Win32 リソース ファイル。Win32 マニフェスト
  • CS1616: オプション 'option' は、ソース ファイルまたは追加されたモジュールで指定された属性 'attribute' をオーバーライドします
  • CS2036: /pdb オプションでは、/debug オプションも使用する必要があります
  • CS2044: /sourcelink スイッチは、PDB を出力する場合にのみサポートされます。
  • CS2045: /embed スイッチは、PDB を出力する場合にのみサポートされます。
  • CS8771: 出力ディレクトリを特定できませんでした

これらのエラーは、コンパイラ オプションが相互に矛盾したり、ソース レベルの属性をオーバーライドしたり、指定しなかったコンパニオン オプションが必要であることを示しています。 コンパイラ オプションの完全な一覧については、「 C# コンパイラ オプション」を参照してください。

  • Win32 リソース ファイル内にカスタム Win32 マニフェストを含め、 /win32manifest コンパイラ オプション (CS1564) を削除します。 Win32ResourceWin32Manifest の両方を同時に指定することはできません。 /Win32res を使用する場合は、リソース ファイルにマニフェストを含めます。
  • 競合するソース属性または競合するコマンド ライン オプションを削除して、相互に矛盾しないようにします (CS1616)。 この警告は、ソース内の AssemblyKeyFileAttributeAssemblyKeyNameAttribute などのアセンブリ属性が KeyFile または KeyContainer コマンド ライン オプションと競合する場合に発生します。
  • PdbFile の使用時に /debug コンパイラ オプションを追加するか、/pdb オプション (CS2036) を削除します。 プログラム データベース ファイルはデバッグ ビルド用にのみ生成されるため、 /pdb/debug なしでは意味がありません。 詳細については、「 DebugType (C# コンパイラ オプション)」を参照してください。
  • /sourcelink または /DebugType (CS2044CS2045) を使用するときに PDB の生成を有効にするには、/debug オプション (またはプロジェクトで設定) を追加します。 ソース リンクと埋め込みソースの両方に PDB 出力が必要です。これは、ソース情報が PDB ファイルに格納されるためです。
  • プロジェクトまたはコマンド ラインで有効な出力ディレクトリ (CS8771) が指定されていることを確認します。 プロジェクト ファイル内の OutputPath または OutDir プロパティを確認するか、有効な /out: 引数をコンパイラに渡します。

モジュールとアセンブリの構成

  • CS3012: CLS 準拠チェックを有効にするには、モジュールではなくアセンブリに CLSCompliant 属性を指定する必要があります
  • CS3013: アセンブリに一致させるには、追加されたモジュールを CLSCompliant 属性でマークする必要があります

これらの警告には、モジュールとアセンブリの CLSCompliant 属性の不一致が含まれます。 CLS の詳細については、 言語に依存しないコンポーネントと言語に依存しないコンポーネントを参照してください。

  • (CS3012) を指定するときに [module:System.CLSCompliant(true)] コンパイラ オプションのモジュール要素を使用してビルドします。 モジュールの CLSCompliant 属性は、出力ターゲットがアセンブリではなくモジュールである場合にのみ意味があります。
  • アセンブリの [module:CLSCompliant(true)]) に一致するように、[module:CLSCompliant(false)] を介して追加されたモジュールに一致するまたは属性を追加します。 既定値は [module:CLSCompliant(false)]であるため、CLS に準拠する必要があるモジュールは明示的にオプトインする必要があります。

コンパイラ インフラストラクチャエラー

  • CS0007: 予期しない共通言語ランタイム初期化エラー - 'description'
  • CS7038: モジュール 'module' を出力できませんでした: エラー
  • CS8751: C# コンパイラの内部エラー。

これらのエラーは、ソース コードまたはコマンド ライン オプションの問題ではなく、コンパイラ独自のインフラストラクチャでエラーが発生したことを示します。

  • csc.exe.config で指定されたランタイム バージョンがインストールされ、破損していない (CS0007) ことを確認します。 セットアップ プロセスでこのファイルが構成されるため、変更しないでください。 ファイルを変更した場合は、指定したランタイム バージョンがコンピューターに存在することを確認します。 正しいバージョンが存在するが、破損している可能性がある場合は、共通言語ランタイムを再インストールします。 コンパイラの新しいバージョンでは、このエラーが生成されなくなり、最新の dotnet build ツールチェーンには適用されません。
  • クリーン リビルドを試し、すべてのアセンブリ参照が有効で破損していないかどうかを確認し、参照バージョンの競合を確認します (CS7038)。 このエラーは、アセンブリ出力フェーズ中に下位レベルのエラーをラップします。 入れ子になったエラー メッセージには、問題の詳細が表示されます。
  • Roslyn リポジトリで issue を報告してください。最小限の再現コード(CS8751)を添えてください。 このエラーは、コンパイラ自体のバグを示します。 あなたのコードが、コンパイラ チームが想定していなかったコードパスを露呈させました。