リソースを指定する C# コンパイラ オプション

次のオプションは、C# コンパイラによる Win32 リソースの作成またはインポート方法を制御します。 新しい MSBuild 構文は太字で示されています。 以前の csc.exe 構文は、code style で示されています。

  • Win32Resource / -win32res: Win32 リソース ファイル (.res) を指定します。
  • Win32Icon / -win32icon: 指定されたアセンブリ ファイルからメタデータを参照します。
  • Win32Manifest / -win32manifest: Win32 マニフェスト ファイル (.xml) を指定します。
  • NoWin32Manifest / -nowin32manifest: 既定の Win32 マニフェストを含めません。
  • Resources / -resource: 指定されたリソース (短い形式: /res) を埋め込みます。
  • LinkResources / -linkresources: このアセンブリに指定されたリソースをリンクします。

Win32Resource

Win32Resource オプションは、Win32 リソースを出力ファイルに挿入します。

<Win32Resource>filename</Win32Resource>

filename は出力ファイルに追加するリソース ファイルです。 Win32 リソースは、バージョンまたはビットマップ (アイコン) 情報を格納できます。エクスプローラーでアプリケーションを識別するのに役立ちます。 このオプションを指定しない場合、コンパイラはアセンブリ バージョンに基づいてバージョン情報を生成します。

Win32Icon

Win32Icon オプションは、エクスプローラーで出力ファイルを適切に表示する .ico ファイルを出力ファイルに挿入します。

<Win32Icon>filename</Win32Icon>

filename は出力ファイルに追加する .ico ファイルです。 .ico ファイルはリソース コンパイラで作成できます。 リソース コンパイラは、Visual C++ プログラムをコンパイルするときに呼び出されます。 .ico ファイルは .rc ファイルから作成されます。

Win32Manifest

Win32Manifest オプションは、プロジェクトのポータブル実行可能 (PE) ファイルに埋め込まれる、ユーザー定義の Win32 アプリケーション マニフェスト ファイルを指定するために使用します。

<Win32Manifest>filename</Win32Manifest>

filename は、カスタム マニフェスト ファイルの名前と場所です。 既定では、C# コンパイラは "asInvoker" の要求実行レベルを指定するアプリケーション マニフェストを埋め込みます。 マニフェストは、実行可能ファイルがビルドされたものと同じフォルダーに作成されます。 カスタム マニフェストを指定する場合 (たとえば、"highestAvailable" または "requireAdministrator" の要求実行レベルを指定する場合) は、このオプションを使用してファイルの名前を指定します。

注意

このオプションと Win32Resources オプションは、相互に排他的です。 同じコマンド行で両方のオプションを使おうすると、ビルド エラーが返されます。

アプリケーション マニフェストを持たないアプリケーションは、要求実行レベルを指定した場合、Windows のユーザー アカウント制御機能によって、ファイルまたはレジストリの仮想化の対象となります。 詳細については、「ユーザー アカウント制御」を参照してください。

次の条件のいずれかに該当する場合、アプリケーションは仮想化の対象となります。

  • NoWin32Manifest オプションを使用していて、後のビルド手順で、またはWin32Resource オプションを使用して Windows リソース ( .res) ファイルの一部としてマニフェストを提供していない。
  • 要求実行レベルが指定されていないカスタム マニフェストを提供している。

Visual Studio は、既定の .manifest ファイルを作成し、それを実行可能ファイルと一緒にデバッグとリリースのディレクトリに保存します。 カスタム マニフェストを追加するには、任意のテキスト エディターでカスタム マニフェストを作成し、そのファイルをプロジェクトに追加します。 または、ソリューション エクスプローラー[プロジェクト] アイコンを右クリックし、 [新しい項目の追加] を選択して、 [アプリケーション マニフェスト ファイル] を選択します。 新規または既存のマニフェスト ファイルを追加すると、それが [マニフェスト] ドロップダウン リストに表示されます。 詳しくは、「[アプリケーション] ページ (プロジェクト デザイナー) (C#)」をご覧ください。

アプリケーション マニフェストは、カスタムのビルド後手順として提供するか、NoWin32Manifest オプションを使用して、Win32 リソース ファイルの一部として提供できます。 アプリケーションを Windows Vista でファイルまたはレジストリの仮想化の対象にする場合は、これと同じオプションを使用します。

NoWin32Manifest

NoWin32Manifest オプションを利用し、アプリケーション マニフェストを実行可能ファイルに埋め込まないようコンパイラに指示します。

<NoWin32Manifest />

このオプションを使用すると、Win32 リソース ファイルに、あるいは後のビルド ステップでアプリケーション マニフェストを指定しない限り、 Windows Vista で仮想化に従います。

Visual Studio では、このオプションを [アプリケーション プロパティ] ページで設定します。[マニフェスト] ドロップダウン リストの [マニフェストなしでアプリケーションを作成します] を選択します。 詳しくは、「[アプリケーション] ページ (プロジェクト デザイナー) (C#)」をご覧ください。

リソース

指定されたリソースを出力ファイルに埋め込みます。

<Resources Include=filename>
  <LogicalName>identifier</LogicalName>
  <Access>accessibility-modifier</Access>
</Resources>

filename は、出力ファイルに埋め込む .NET リソース ファイルです。 identifier (省略可能) はリソースの論理名で、リソースを読み込むために使われる名前です。 既定値は、ファイルの名前です。 accessibility-modifier (省略可能) はリソースのアクセシビリティで、パブリックまたはプライベートのどちらかです。 既定値はパブリックです。 既定では、リソースは、C# コンパイラを使用して作成されるときにアセンブリ内でパブリックになります。 リソースをプライベートにするには、アクセシビリティ修飾子として private を指定します。 publicprivate 以外のアクセシビリティは使用できません。 filename が、たとえば Resgen.exe によって作成されたり、開発環境で作成されたりした .NET リソース ファイルである場合は、System.Resources 名前空間のメンバーを使ってそのファイルにアクセスできます。 詳細については、「System.Resources.ResourceManager」を参照してください。 それ以外のすべてのリソースに対しては、Assembly クラスの GetManifestResource メソッドを使用して、実行時にリソースにアクセスします。 出力ファイルにおけるリソースの順序は、プロジェクト ファイルでの指定順序に基づいて決定されます。

LinkResources

.NET のリソースへのリンクを出力ファイルに作成します。 リソース ファイルは出力ファイルに追加されません。 LinkResources は、リソース ファイルを出力ファイルに埋め込む Resource オプションとは異なります。

<LinkResources Include=filename>
  <LogicalName>identifier</LogicalName>
  <Access>accessibility-modifier</Access>
</LinkResources>

filename は、アセンブリからリンクする .NET リソース ファイルです。 identifier (省略可能) はリソースの論理名で、リソースを読み込むために使われる名前です。 既定値は、ファイルの名前です。 accessibility-modifier (省略可能) はリソースのアクセシビリティで、パブリックまたはプライベートのどちらかです。 既定値はパブリックです。 既定では、リンクされたリソースは、C# コンパイラで作成されるときにアセンブリ内でパブリックになります。 リソースをプライベートにするには、アクセシビリティ修飾子として private を指定します。 public または private 以外の他の修飾子は許可されません。 filename が、たとえば Resgen.exe によって作成されたり、開発環境で作成されたりした .NET リソース ファイルである場合は、System.Resources 名前空間のメンバーを使ってそのファイルにアクセスできます。 詳細については、「System.Resources.ResourceManager」を参照してください。 それ以外のすべてのリソースに対しては、Assembly クラスの GetManifestResource メソッドを使用して、実行時にリソースにアクセスします。 filename で指定するファイルはどのような形式でもかまいません。 たとえば、ネイティブ DLL をアセンブリの一部にすることで、グローバル アセンブリ キャッシュにインストールして、アセンブリ内のマネージド コードからアクセスできるようにすることができます。 同じことをアセンブリ リンカーで行うことができます。 詳しくは、「Al.exe (アセンブリ リンカー)」および「アセンブリとグローバル アセンブリ キャッシュの使用」をご覧ください。