リソースの追加と編集 (Visual C#)

更新 : 2007 年 11 月

Visual C# アプリケーションには、ソース コード以外のデータが含まれることがよくあります。このようなデータはプロジェクト リソースと呼ばれ、バイナリ データ、テキスト ファイル、オーディオ ファイル、ビデオ ファイル、文字列テーブル、アイコン、イメージ、XML ファイルなど、アプリケーションに必要な種類のデータが含まれます。プロジェクト リソース データは、.resx ファイル (既定では Resources.resx という名前) に XML 形式で格納されます。このファイルはソリューション エクスプローラで開くことができます。プロジェクト リソースの詳細については、「リソース ファイルの操作」を参照してください。

プロジェクトへのリソース追加

プロジェクトにリソースを追加するには、[ソリューション エクスプローラ] ウィンドウで、プロジェクトの [プロパティ] ノードを右クリックし、[開く] をクリックします。次に、[プロジェクト デザイナ] ウィンドウの [リソース] ページの [リソースの追加] をクリックします。

また、リソースはリンク リソース (外部ファイル) または埋め込みリソース (.resx ファイルに直接埋め込まれるリソース) としてプロジェクトに追加できます。

  • リンク リソースを追加した場合、プロジェクトのリソース情報を格納する .resx ファイルには、ディスク上のリソース ファイルへの相対パスのみが含まれます。イメージ、ビデオ、またはその他の複雑なファイルをリンク リソースとして追加した場合は、リソース デザイナで該当するファイルの種類に関連付けた既定のエディタを使用して、それらのファイルを編集できます。

  • 埋め込みリソースを追加した場合は、データがプロジェクトのリソース (.resx) ファイルに直接格納されます。埋め込みリソースに格納できるのは文字列のみです。

詳細については、「リンク リソースと埋め込みリソース」および「.Resx ファイル形式のリソース」を参照してください。

リソースの編集

リソース デザイナで各プロジェクト リソースを編集する既定のアプリケーションを割り当てると、開発時にプロジェクト リソースを追加し、変更できます。リソース デザイナにアクセスするには、[ソリューション エクスプローラ] ウィンドウの [プロパティ] を右クリックし、[開く] をクリックして、[プロジェクト デザイナ] ウィンドウの [リソース] タブをクリックします。詳細については、「[リソース] ページ (プロジェクト デザイナ)」を参照してください。リソース デザイナのメニュー オプションを次の図に示します。

リソース デザイナ メニュー項目

埋め込みリソースを編集するには、.resx ファイルを使用して、個々の文字やバイトを直接操作する必要があります。そのため、複雑な種類のファイルは、開発時にリンク リソースとして格納する方が便利です。バイナリ エディタを使用すると、.resx ファイルを含むリソース ファイルを、16 進形式または ASCII 形式のバイナリ レベルで編集できます。イメージ エディタを使用すると、アイコンとカーソルの他に、リンク リソースとして格納された .jpeg ファイルや GIF ファイルも編集できます。また、これらのファイルの種類では、エディタとして他のアプリケーションを選択することもできます。詳細については、「リソース エディタでのリソースの表示と編集」を参照してください。

リソースのアセンブリへのコンパイル

アプリケーションをビルドするときに、Visual Studio では resgen.exe ツールが呼び出され、アプリケーション リソースが Resources という内部クラスに変換されます。このクラスは、Resources.Designer.cs ファイルに含まれます。このファイルは、ソリューション エクスプローラでは Resources.resx ファイルの下に入れ子になっています。実行時に厳密に型指定されたリソースになるように、すべてのプロジェクト リソースは、Resources クラスによって静的で読み取り専用の get プロパティにカプセル化されます。Visual C# IDE を通じてビルドする場合は、.resx ファイルに埋め込まれたリソースとリンク ファイルの両方を含む、カプセル化されたすべてのリソース データがアプリケーション アセンブリ (.exe ファイルまたは .dll ファイル) に直接コンパイルされます。つまり、Visual C# IDE は常に /resource コンパイラ オプションを使用します。コマンド ラインからビルドする場合は、/linkresource コンパイラ オプションを指定して、メイン アプリケーション アセンブリとは別個のファイルにリソースを配置できます。これは高度なシナリオであり、必要になるのはまれです。メイン アプリケーション アセンブリとは別個にリソースを配置するシナリオとしては、次に説明するサテライト アセンブリを使用する方が一般的です。

実行時のリソースへのアクセス

実行時にリソースにアクセスするには、他のクラス メンバにアクセスするときと同様に参照するだけです。Image01 という名前を付けたビットマップ リソースを取得する方法を次の例に示します。リソース クラスが名前空間 <projectName>.Properties 内にある点に注意してください。個々のリソースの完全修飾名を使用するか、リソース クラスにアクセスするソース ファイル内に適切な using ディレクティブを追加する必要があります。

System.Drawing.Bitmap bitmap1 = myProject.Properties.Resources.Image01;

内部的には、get プロパティによって ResourceManager クラスが使用され、オブジェクトの新しいインスタンスが作成されます。

詳細については、「アプリケーションのリソース」および「リソース ファイル ジェネレータ (Resgen.exe)」を参照してください。

サテライト アセンブリに含まれるリソース

複数言語へのローカライズ (翻訳) が行われる予定のアプリケーションを作成する場合、カルチャ固有の各文字列セットを、固有のサテライト アセンブリのリソースとして格納できます。アプリケーションを配布するときに、メインのアプリケーション アセンブリの他に、適切なサテライト アセンブリを含めます。メインのアプリケーション アセンブリを再コンパイルしなくても、サテライト アセンブリを新たに追加したり、既存のサテライト アセンブリを変更したりできます。詳細については、「サテライト アセンブリの作成」および「固有カルチャのリソースの検索と使用」を参照してください。

参照

概念

プロジェクト デザイナの概要

その他の技術情報

Visual C#

Visual C# について

共通言語ランタイムのアセンブリ

アプリケーションのグローバライズとローカライズ