高度な C# コンパイラ オプション

次のオプションでは高度なシナリオがサポートされます。 新しい MSBuild 構文は、太字で示されています。 以前の csc.exe 構文は、code style で示されています。

  • MainEntryPointStartupObject / -main: エントリ ポイントを含む型を指定します。
  • PdbFile / -pdb: デバッグ情報ファイルの名前を指定します。
  • PathMap / -pathmap: コンパイラによるソース パス名出力のマッピングを指定します。
  • ApplicationConfiguration / -appconfig: アセンブリ バインド設定を含むアプリケーション構成ファイルを指定します。
  • AdditionalLibPaths / -lib: 参照を検索する追加のディレクトリを指定します。
  • GenerateFullPaths / -fullpath: コンパイラにより絶対パスが生成されます。
  • PreferredUILang / -preferreduilang: 優先される出力言語名を指定します。
  • BaseAddress / -baseaddress: ビルドするライブラリのベース アドレスを指定します。
  • ChecksumAlgorithm / -checksumalgorithm : PDB に格納されているソース ファイルのチェックサムを計算するためのアルゴリズムを指定します。
  • CodePage / -codepage: ソース ファイルを開くときに使用するコードページを指定します。
  • Utf8Output / -utf8output: UTF-8 エンコードでコンパイラのメッセージを出力します。
  • FileAlignment / -filealign: 出力ファイル セクションで使用される配置を指定します。
  • ErrorEndLocation / -errorendlocation: 各エラーの終了位置の出力行および列。
  • NoStandardLib / -nostdlib: 標準ライブラリ (mscorlib.dll) を参照しません。
  • SubsystemVersion / -subsystemversion: このアセンブリのサブシステム バージョンを指定します。
  • ModuleAssemblyName / -moduleassemblyname: このモジュールが一部となるアセンブリの名前。

MainEntryPoint または StartupObject

このオプションは、Main メソッドを含むクラスが複数ある場合に、プログラムへのエントリ ポイントを含むクラスを指定します。

<StartupObject>MyNamespace.Program</StartupObject>

or

<MainEntryPoint>MyNamespace.Program</MainEntryPoint>

ここで、ProgramMain メソッドを含む型です。 指定するクラス名は完全に修飾する必要があります。クラスを含む完全な名前空間を指定し、そのあとにクラス名を続ける必要があります。 たとえば、Main メソッドが、MyApplication.Core 名前空間の Program クラス内に置かれている場合、コンパイラ オプションは -main:MyApplication.Core.Program とする必要があります。 コンパイルに Main メソッドの型以外のものが含まれている場合は、Main メソッドを含む型を指定することができます。

注意

このオプションは、プロジェクトに 1 つまたは複数の Main メソッドが含まれている場合でも、最上位レベルのステートメントを含むプロジェクトには使用できません。

PdbFile

PdbFile コンパイラ オプションでは、デバッグ シンボル ファイルの名前と場所を指定します。 filename の値で、デバッグ シンボル ファイルの名前と場所が示されます。

<PdbFile>filename</PdbFile>

DebugType を指定すると、コンパイラにより、出力ファイル (.exe または .dll) が作成されるのと同じディレクトリに .pdb ファイルが作成されます。 .pdb ファイルには、出力ファイルの名前と同じベース ファイル名が付けられます。 PdbFile では、.pdb ファイルに対し、既定以外のファイル名と場所を指定することができます。 このコンパイラ オプションは、Visual Studio 開発環境で設定することはできません。また、プログラムで変更することもできません。

PathMap

PathMap コンパイラ オプションでは、コンパイラによるソース パス名出力への物理パスのマップ方法を指定します。 このオプションは、コンパイラが実行されるコンピューター上の各物理パスを、出力ファイルに書き込まれる必要がある対応するパスにマップします。 次の例では、path1 は現在の環境内のソース ファイルへの完全パスであり、sourcePath1 は、すべての出力ファイルで path1 に置き換えられるソース パスです。 複数のマップされるソース パスを指定するには、それぞれをセミコロンで区切ります。

<PathMap>path1=sourcePath1;path2=sourcePath2</PathMap>

コンパイラは、次の理由でその出力にソース パスを書き込みます。

  1. CallerFilePathAttribute が省略可能なパラメーターに適用される場合、引数はソース パスに置き換えられます。
  2. ソース パスは、PDB ファイルに埋め込まれます。
  3. PDB ファイルのパスは、PE (ポータブル実行可能) ファイルに埋め込まれます。

ApplicationConfiguration

ApplicationConfiguration コンパイラ オプションを利用すると、C# アプリケーションで、アセンブリのバインド時に共通言語ランタイム (CLR) にアセンブリのアプリケーション構成 (app.config) ファイルの場所を指定できます。

<ApplicationConfiguration>file</ApplicationConfiguration>

ここで、file はアセンブリ バインド設定を含むアプリケーション構成ファイルです。 ApplicationConfiguration の用途の 1 つは、1 つのアセンブリで、特定の参照アセンブリの .NET Framework バージョンと .NET Framework for Silverlight バージョンの両方を同時に参照する必要がある高度なシナリオです。 たとえば、WPF (Windows Presentation Foundation) で作成された XAML デザイナーにおいて、デザイナーのユーザー インターフェイスとして WPF デスクトップを参照すると共に、Silverlight に組み込まれている WPF のサブセットも参照する必要がある場合があります。 同じデザイナー アセンブリで両方のアセンブリにアクセスする必要があります。 既定では、この 2 つのアセンブリはアセンブリ バインディングで同等と見なされるため、別々に参照するとコンパイラ エラーが発生します。 ApplicationConfiguration コンパイラ オプションを利用すると、次の例に示されているように、<supportPortability> タグを使用して既定の動作を無効にする app.config ファイルの場所を指定できます。

<supportPortability PKT="7cec85d7bea7798e" enable="false"/>

このコンパイラは、CLR のアセンブリ バインド ロジックにファイルの場所を渡します。

注意

プロジェクトに既に設定されている app.config ファイルを使用するには、プロパティ タグ <UseAppConfigForCompiler>.csproj ファイルに追加し、その値を true に設定します。 異なる app.config ファイルを指定するには、プロパティ タグ <AppConfigForCompiler> を追加し、その値をファイルの場所に設定します。

.NET Framework と .NET Framework for Silverlight の両方の実装に存在する .NET Framework アセンブリについて、その両方の実装をアプリケーションで参照できるようにする app.config ファイルの例を次に示します。 ApplicationConfiguration コンパイラ オプションでは、この app.config ファイルの場所を指定します。

<configuration>
  <runtime>
    <assemblyBinding>
      <supportPortability PKT="7cec85d7bea7798e" enable="false"/>
      <supportPortability PKT="31bf3856ad364e35" enable="false"/>
    </assemblyBinding>
  </runtime>
</configuration>

AdditionalLibPaths

AdditionalLibPaths オプションでは、References オプションで参照されるアセンブリの場所を指定します。

<AdditionalLibPaths>dir1[,dir2]</AdditionalLibPaths>

ここで dir1 は、参照されているアセンブリが現在の作業ディレクトリ (コンパイラを起動するディレクトリ) または共通言語ランタイムのシステム ディレクトリに見つからない場合に、コンパイラによって検索されるディレクトリです。 dir2 は、アセンブリ参照を検索する 1 つまたは複数の追加ディレクトリです。 ディレクトリ名はコンマで区切り、それらの間に空白は入れません。 コンパイラによって、完全に修飾されていないアセンブリ参照が次の順序で検索されます。

  1. 現在の作業ディレクトリ。
  2. 共通言語ランタイムのシステム ディレクトリ。
  3. AdditionalLibPaths によって指定されているディレクトリ。
  4. LIB 環境変数によって指定されているディレクトリ。

アセンブリ参照を指定するには、Reference を使います。 AdditionalLibPaths は付加的なものです。 複数回指定すると、前の値に追加されます。 依存アセンブリへのパスはアセンブリ マニフェストで指定されていないため、アプリケーションにより、グローバル アセンブリ キャッシュでアセンブリが検索されて使用されます。 コンパイラでアセンブリが参照されているからといって、共通言語ランタイムで実行時にアセンブリを見つけて読み込めるわけではありません。 ランタイムが参照されているアセンブリを検索する方法について詳しくは、「ランタイムがアセンブリを検索する方法」をご覧ください。

GenerateFullPaths

GenerateFullPaths オプションを指定すると、コンパイルのエラーや警告を一覧表示する際に、コンパイラによってファイルの完全なパスが指定されます。

<GenerateFullPaths>true</GenerateFullPaths>

既定では、コンパイルの結果として発生したエラーや警告には、エラーが見つかったファイルの名前が指定されます。 GenerateFullPaths オプションを使用すると、コンパイラによってファイルの完全なパスが指定されます。 このコンパイラ オプションは Visual Studio では使用できず、プログラムで変更することはできません。

PreferredUILang

PreferredUILang コンパイラ オプションを使うと、C# コンパイラで、エラー メッセージなどの出力を表示する言語を指定できます。

<PreferredUILang>language</PreferredUILang>

ここで language は、コンパイラ出力に使う言語の言語名 です。 PreferredUILang コンパイラ オプションを使うと、C# コンパイラで、エラー メッセージおよびその他のコマンドライン出力に使用する言語を指定できます。 言語の言語パックがインストールされていない場合は、オペレーティング システムの言語設定が代わりに使用されます。

BaseAddress

BaseAddress オプションを使用すると、DLL を読み込む位置に推奨されるベース アドレスを指定できます。 このオプションを使用するタイミングと理由の詳細については、Larry Osterman のブログを参照してください。

<BaseAddress>address</BaseAddress>

ここで、address は DLL のベース アドレスです。 このアドレスは、10 進数、16 進数、または 8 進数で指定できます。 DLL の既定のベース アドレスは、.NET 共通言語ランタイムにより設定されます。 このアドレスの下位ワードは丸められます。 たとえば、0x11110001 と指定すると、丸められて 0x11110000 になります。 DLL の署名プロセスを完了するには、-R オプションを指定した SN.EXE を使用します。

ChecksumAlgorithm

このオプションでは、PDB 内のソース ファイルをエンコードするために使用するチェックサム アルゴリズムを制御します。

<ChecksumAlgorithm>algorithm</ChecksumAlgorithm>

algorithm は、SHA1 (既定値) または SHA256 である必要があります。

CodePage

このオプションでは、必要とするページが、システムの現在の既定のコードページでない場合に、コンパイル時に使用するコードページを指定します。

<CodePage>id</CodePage>

ここで id は、コンパイル時にすべてのソース コード ファイルで使用するコード ページの ID です。 コンパイラでは、まずすべてのソース ファイルを UTF-8 として解釈しようと試みられます。 ソース コード ファイルが UTF-8 以外のエンコードで、7 ビット ASCII 文字以外の文字が使われている場合は、CodePage オプションを使って、使用する必要があるコード ページを指定します。 CodePage は、コンパイル時にすべてのソース コード ファイルに適用されます。 使用しているシステムでサポートされているコード ページを確認する方法については、GetCPInfo に関するページをご覧ください。

Utf8Output

Utf8Output オプションでは、UTF-8 エンコードを使用してコンパイラ出力を表示します。

<Utf8Output>true</Utf8Output>

国際化の設定によっては、コンパイラの出力が正しくコンソールに表示できない場合があります。 Utf8Output を使用して、コンパイラ出力をファイルにリダイレクトします。

FileAlignment

FileAlignment オプションを使用すると、出力ファイル内のセクションのサイズを指定できます。 有効値は 512、1024、2048、4096、および 8192 です。 これらの値はバイト単位です。

<FileAlignment>number</FileAlignment>

FileAlignment オプションは、Visual Studio でプロジェクトの [ビルド] プロパティの [詳細設定] ページから設定します。 各セクションは、FileAlignment 値の倍数である境界上に配置されます。 固定の既定値はありません。 FileAlignment が指定されていない場合、共通言語ランタイムによってコンパイル時に既定値が選択されます。 セクションのサイズを指定すると、出力ファイルのサイズに影響します。 セクションのサイズ変更は、比較的小さなデバイスで実行されるプログラムに対して有効な場合があります。 出力ファイル内のセクションに関する情報を表示するには、DUMPBIN を使用します。

ErrorEndLocation

各エラーの終了位置の出力行および列をコンパイラに指示します。

<ErrorEndLocation>true</ErrorEndLocation>

既定では、コンパイラにより、すべてのエラーと警告についてソース内の開始位置が書き込まれます。 このオプションが true に設定されている場合、コンパイラにより、各エラーと警告の開始と終了の両方の位置が書き込まれます。

NoStandardLib

NoStandardLib では、System 名前空間全体を定義する mscorlib.dll がインポートされないようにします。

<NoStandardLib>true</NoStandardLib>

独自の System 名前空間およびオブジェクトを定義または作成する場合は、このオプションを使用します。 NoStandardLib を指定しない場合、(<NoStandardLib>false</NoStandardLib> を指定したことと同じで) mscorlib.dll がプログラムにインポートされます。

SubsystemVersion

実行可能ファイルが実行されるサブシステムの最小バージョンを指定します。 通常、このオプションを指定することで、Windows の以前のバージョンでは使用できないセキュリティ機能を実行可能ファイルで確実に利用できるようになります。

注意

サブシステム自体を指定するには、TargetType のコンパイラ オプションを使用します。

<SubsystemVersion>major.minor</SubsystemVersion>

major.minor では、サブシステムに必要な最小バージョンを指定します。これは、メジャーおよびマイナー バージョンのドット表記で表されます。 たとえば、Windows 7 より前のオペレーティン グシステムではアプリケーションを実行できないように指定できます。 このオプションの値を 6.01 に設定します (この記事の後述の表を参照)。 majorminor の値を整数として指定します。 minor バージョンでは、前に配置されるゼロによってバージョンが変更されることはありませんが、後ろにゼロが付くとバージョンが変わります。 たとえば、6.1 と 6.01 は同じバージョンを示しますが、6.10 は異なるバージョンを示します。 混乱を避けるため、マイナー バージョンには 2 桁の数値を使用することをお勧めします。

次の表は、Windows の一般的なサブシステムのバージョンを示しています。

Windows のバージョン サブシステムのバージョン
Windows Server 2003 5.02
Windows Vista 6.00
Windows 7 6.01
Windows Server 2008 6.01
Windows 8 6.02

SubsystemVersion コンパイラ オプションの既定値は、以下の一覧に示されている条件によって異なります。

  • 次のコンパイラ オプションのいずれかが設定されている場合、既定値は 6.02 です。
  • MSBuild を使用しており、.NET Framework 4.5 が対象で、さらにこの一覧で前に指定したコンパイラ オプションを設定していない場合、既定値は 6.00 です。
  • 上記の条件がどれも当てはまらない場合、既定値は 4.00 です。

ModuleAssemblyName

.netmodule でアクセスできる非パブリック型のアセンブリの名前を指定します。

<ModuleAssemblyName>assembly_name</ModuleAssemblyName>

ModuleAssemblyName は、 .netmodule をビルドするときと、次の条件に当てはまる場合に使用する必要があります。

  • .netmodule で、既存のアセンブリ内の非パブリック型へのアクセスが必要である。
  • .netmodule をビルドするアセンブリの名前を把握していること。
  • 既存のアセンブリに、netmodule がビルドされるアセンブリへのフレンド アセンブリのアクセス権が付与されている。

.netmodule のビルドについて詳しくは、モジュールTargetType オプションを参照してください。 フレンド アセンブリの詳細については、「フレンド アセンブリ」を参照してください。