C#コンパイラエラーCS2020の原因と対策について解説
CS2020はC#のコンパイラで発生するエラーです。
複数の出力ファイルをコンパイルする際、最初の出力は-target:exe
、-target:winexe
、または-target:library
で構築し、その後のファイルは-target:module
でビルドする必要があります。
入力ファイルの順序やターゲット指定に誤りがある場合にエラーが発生するため、設定を確認してください。
CS2020エラーの原因
複数出力ファイル設定の誤り
最初の出力ファイルのターゲット指定の不備
複数出力ファイルを作成する場合、最初の出力ファイルは実行可能形式またはライブラリとして生成される必要があります。
具体的には、最初のファイルに対しては -target:exe
、-target:winexe
、または -target:library
のいずれかの指定が必須です。
もしこれらの指定が不足すると、コンパイラはCS2020エラーを返すため、設定ファイルやビルドスクリプトを注意深く確認する必要があります。
以降の出力ファイルの-module指定の不適切な利用
最初のファイル以降に出力するファイルは、-target:module
によりコンパイルされることが求められます。
ここで、誤って実行可能形式やライブラリとしてコンパイルしようとすると、CS2020エラーが発生します。
そのため、後続ファイルの出力設定は必ず -target:module
を用いて行い、順序にも注意する必要があります。
入力ファイル順序の問題
ファイル並び順による設定の影響
複数ファイルを一度にコンパイルする際、入力するソースファイルの順序が結果に影響を及ぼす場合があります。
最初に指定したファイルが出力形式の基本設定となるため、意図しない順序でファイルが入力されると、正しいターゲット指定が反映されずCS2020エラーが発生する恐れがあります。
このため、コンパイル時には入力ファイルの並び順にも十分注意する必要があります。
CS2020エラーの対策
ターゲット指定の正しい設定方法
-target:exe、-target:winexe、-target:libraryの活用
最初の出力ファイルを構築する際は、目的に合わせたターゲット指定を正しく行います。
例えば、実行可能ファイルとしてビルドする場合は -target:exe
を指定し、GUIアプリケーションの場合は -target:winexe
を使用します。
ライブラリとして出力する場合は -target:library
が適切です。
下記のサンプルコードは、実行可能ファイル用の設定例として、-target:exe
を利用する際のシンプルなプログラムです。
using System;
public class Program
{
// Main関数はエントリーポイントです
public static void Main(string[] args)
{
// サンプル: 実行可能なアプリケーション用の出力設定でコンパイルされる
Console.WriteLine("Hello, World! - EXE Build");
}
}
Hello, World! - EXE Build
-target:moduleの適用手順
後続の出力ファイルは、モジュール形式としてビルドする必要があります。
コンパイラオプションで -target:module
を指定することで、最初の出力ファイル以外のコンパイルがモジュール形式となり、CS2020エラーを回避できます。
以下のサンプルコードは、簡易的なモジュール用のプログラム例ですが、なお実際にはモジュールはライブラリの一部として利用され、単体で実行されることは通常ありません。
ここでは、説明のためにメイン関数を含めています。
using System;
public class ModuleProgram
{
// Main関数はデバッグ目的で含まれていますが、実際のモジュールは実行可能形式ではありません。
public static void Main(string[] args)
{
// サンプル: モジュールとしての出力設定で使用するコード例
Console.WriteLine("This module is built with -target:module");
}
}
This module is built with -target:module
プロジェクト設定の見直し
Visual Studioでのコンパイル設定確認
Visual Studioを利用している場合、プロジェクトのプロパティから出力タイプを確認することが大切です。
「アプリケーション」タブ内の「出力の種類」で、プロジェクトの目的(実行可能ファイル・ライブラリなど)に合わせた設定を行います。
設定ミスがあると、複数出力ファイルの設定不備としてCS2020エラーにつながるため、各プロジェクトの設定を念入りにチェックしてください。
コマンドラインビルド時のオプション調整
コマンドラインでビルドする場合、各出力ファイルに対して正しい変更が反映されるようオプションを調整します。
例えば、最初のファイルには -target:exe
や -target:library
を適用し、後続のファイルには必ず -target:module
を指定します。
また、入力ファイルの順序にも注意を払い、意図した通りの順番でビルドが行われるようスクリプトやバッチファイルを整備することが推奨されます。
まとめ
本記事では、CS2020エラーが発生する原因について、複数出力ファイルの設定不備や入力ファイルの順番による影響を解説しています。
最初の出力ファイルには-target:exe
、-target:winexe
または-target:library
を指定し、以降のファイルでは必ず-target:module
を利用する必要があります。
また、Visual Studioのプロパティ設定やコマンドラインでのオプション調整により、正しい出力が行える方法も説明しています。