.NET TIPS

VS.NETで画像などのリソースを利用するには?(組込編)

デジタルアドバンテージ
2004/10/15

 「TIPS:VS.NETで画像などのリソースを利用するには?(準備編)」の内容を踏まえて、今回はリソース・ファイル(.resourcesファイル)や画像ファイル(.gifファイルや.jpgファイルなど)をアセンブリに埋め込む方法を解説する(なお、以下の本文中にある「埋め込む」と「組み込む」という用語は、同じ意味で使っている)。

 本稿では、Visual Studio .NET(以降、VS.NET)のIDEを利用したリソースの利用方法を中心に紹介し、コマンドラインによる方法についての詳細は割愛するので、ご了承いただきたい。

アセンブリで利用するリソースの組み込み方法の種類

 準備編では、.NETアプリケーションで利用できるリソースとして、(主に)次の5種類があることを説明した。

  1. 外部画像ファイル
  2. マニフェスト・リソース
  3. 外部リソース・ファイル
  4. 埋め込みリソース
  5. デザイナ・リソース

 この5種類のリソースをアセンブリに組み込む方法(もしくは配置する方法)は、次の3つのタイプに分けられる。

(1)「外部ファイル(外部画像ファイル、外部リソース・ファイル)」の配置方法

(2)「埋め込みファイル(マニフェスト・リソース、埋め込みリソース)」の組み込み方法

(3)「埋め込みファイル(デザイナ・リソース)」の組み込み方法

 よって本稿では、この3タイプの組み込み方法/配置方法について説明する。

【コラム】Win32リソースとリンク・リソース
 .NETで利用可能なリソースには、本稿で解説しているもの以外にも、「Win32リソース」や「リンク・リソース」といったものがある。しかしこれらのリソースは、VS.NETのIDEから利用できないため、詳細は割愛している。

 Win32リソースとは、.NET以前にあった.resファイルによるリソースである。一方、リンク・リソースとは、アセンブリ内には埋め込まずに、外部ファイルへのリンクとしてアセンブリに追加されたリソースである。つまりリンク・リソースでは、リソースの実体(ファイル自体)はアセンブリ外部にありながら、埋め込みファイルのように操作することができる。

 Win32リソースは、旧来のリソース形式にこだわる必要がなければ、.NET環境で利用する意義はあまりないだろう。もし過去の資産を引き続き活用したいという目的ならば、MSDN「Building Managed Resources from Win32 Resources」(英語)を参考に、Win32リソースを.NETリソース(=マネージ・リソース)に移行することをお勧めする。またリンク・リソースに関しても、VS.NETから利用できないことや、アセンブリに埋め込んだ方がファイルを管理する手間がかからないことからお勧めしない。

 それでもWin32リソースやリンク・リソースを利用したい場合には、コンパイラである「csc.exe」(C#の場合。VB.NETは「vbc.exe」)にWin32リソース用もしくはリンク・リソース用のオプションを付けて呼び出せばよい。Win32リソースを利用する場合には、「/win32res」オプション(C#の場合。VB.NETは「/win32resource」オプション)を指定する。一方、リンク・リソースを利用する場合には、「/linkresource」オプション(C#の場合。VB.NETは「/linkresource」オプション)を指定すればよい。

(1)「外部ファイル(外部画像ファイル、外部リソース・ファイル)」の配置方法

 外部ファイルについては特に解説の必要はないだろう。画像ファイルやリソース・ファイルを任意のディレクトリに配置すればよい(ちなみにリソース・ファイルは、準備編で説明した「reseditor」を使うことで作成できる)。

 注意点としては、(詳細は「読込編」で説明しているが)ファイル読み込み時に相対パスを使いたい場合には、アセンブリ(.exeファイルや.dllファイル)のパスからの相対位置を考えて、ファイルを配置する必要があることだ。

 実際に次の画面の例では、(アセンブリからの相対位置を考慮して)アセンブリと同じディレクトリに、画像ファイルとリソース・ファイルを配置している。このため、読み込み時には、(絶対パスではなく、相対パスで)ファイル名を指定するだけでよい。

「外部ファイル(外部画像ファイル、外部リソース・ファイル)」の配置方法
「外部ファイル」を利用するには、画像ファイルやリソース・ファイルを任意のディレクトリに配置すればよい。なお、読み込み時には絶対パスだけでなく、相対パスも使用できる。
  外部画像ファイル「dotnet_design1.gif」をアセンブリと同じ場所に配置している。これにより、読み込み時には(相対パス指定で)ファイル名だけでパスを指定できる。
  外部リソース・ファイル「MyResources3.resources」をアセンブリと同じ場所に配置している。これにより、読み込み時には(相対パス指定で)ファイル名だけでパスを指定できる。
  画像リソースを読み込むアセンブリ「WindowsApplication1.exe」。

(2)「埋め込みファイル(マニフェスト・リソース、埋め込みリソース)」の組み込み方法

 画像ファイルやリソース・ファイルは、.NETアセンブリ内にリソースとして埋め込むことができる。本稿では、アセンブリに埋め込まれた画像ファイルを「マニフェスト・リソース」と呼び、アセンブリに埋め込まれたリソース・ファイルを「埋め込みリソース」と呼ぶことは、準備編で説明した。

 画像ファイルやリソース・ファイルをアセンブリへ埋め込む方法は、コマンドラインを使う場合とVS.NETのIDEを使う場合では異なる。

 コマンドラインを使う方法の詳細は、本稿では割愛する。詳しくは、MSDNの「C# コンパイラ オプション /resource」(C#の場合。VB.NETでは「Visual Basic コンパイラ オプション /resource」)を参照してほしい。

 VS.NETのIDEを使う方法は、次の画面のとおりだ。

「埋め込みファイル(マニフェスト・リソース、埋め込みリソース)」の組み込み方法
「埋め込みファイル(マニフェスト・リソース、埋め込みリソース)」を利用するには、の手順でVS.NETプロジェクトに画像ファイルやリソース・ファイルを追加した後、の手順で追加したファイルをアセンブリに埋め込む必要がある。プロジェクトへ画像ファイルやリソース・ファイルを追加するには、VS.NETのIDEのメニュー・バーから[ファイル]−[既存項目の追加]を選択すればよい。もしくは、ソリューション・エクスプローラで[すべてのファイルを表示]を行い、隠しファイルとなっている画像ファイルを右クリックしてコンテキスト・メニューを表示し、そのメニューから[プロジェクトに含める]を選択してもよい(ただしこの方法を使う場合には、事前に、プロジェクト・フォルダの中に画像ファイルやリソース・ファイルを配置しておく必要がある)。
  マニフェスト・リソースを埋め込むには、まず(「images」フォルダの中にある)画像ファイル「dotnet_design2.gif」をプロジェクトに追加する。その後、の手順を実行する。
  埋め込みリソースを組み込むには、まず(「resources」フォルダの中にある)リソース・ファイル「MyResources4.resources」をプロジェクトに追加する。その後、の手順を実行する。
  埋め込みリソースを組み込むには、まず(「resources」フォルダの中にある).resxファイル「MyResx4.resx」をプロジェクトに追加する。その後、の手順を実行する。注意してほしいのは、.resxファイルはVS.NETが自動的に.resourcesファイルに変換してくれるので、実質的にはのようにリソース・ファイル(.resourcesファイル)を追加するのと同じことになる。
  まずの手順でVS.NETプロジェクトに画像ファイルやリソース・ファイルを追加した後、追加したファイルを選択した状態で[プロパティ]ウィンドウを開き、[ビルド アクション]プロパティを「埋め込まれたリソース」に変更する。この指定は忘れやすいので注意すること。

(3)「埋め込みファイル(デザイナ・リソース)」の組み込み方法

 準備編でも述べたが、埋め込みリソースとしては、(2)のように開発者が手動で管理するリソースのほかに、VS.NETのフォーム・デザイナが自動的に管理するリソースがある。このリソースは、本稿では「デザイナ・リソース」と呼ぶ。

 デザイナ・リソースはVS.NETが自動管理するので、意識的にアセンブリへ埋め込む必要はない。ただし、VS.NETで生成されたデザイナ・リソース(.resxファイル)を(VS.NETのIDEではなく)コマンドラインでビルドする場合には、当然、手動で埋め込む必要がある。その場合には、前述の/resourceオプションを使えばよい。

 次の画面は、デザイナ・リソースとして画像リソースを設定しているところだ。この作業により、暗黙的にデザイナ・リソース(.resxファイル)に画像リソースが追加される。後はVS.NETのIDEを使ってプロジェクトをビルドすると、それにより生成されたアセンブリにそのデザイナ・リソースが自動的に埋め込まれる。

「埋め込みファイル(デザイナ・リソース)」の組み込み方法
「埋め込みファイル(デザイナ・リソース)」を利用するには、の手順で画像関連のプロパティに画像ファイルを指定すればよい。後はVS.NETのIDEが自動的にリソース管理を行ってくれる。
  VS.NETのIDEで、Windowsフォーム(この例では「Form1.cs」)を新規作成すると、隠しファイルとして.resxファイル(この例では「Form1.resx」)が一緒に自動生成される。この.resxファイルはVS.NETでビルドを行うと、自動的にリソース・ファイル(.resourcesファイル)に変換され、そのリソース・ファイルがアセンブリに自動的に追加される。
  画像リソースを設定したいフォームやコントロール(この例では、PictureBoxコントロールの「pictureBox5」)を選択して、[プロパティ]ウィンドウを開く。
  フォームやコントロール(この例では「pictureBox5」)を選択して(の手順)、[プロパティ]ウィンドウの画像関連のプロパティ(この例では「Imageプロパティ」)に画像リソース(画面では見えないが、この例では「dotnet_design5.gif」)を指定する。これにより、の.resxファイルに画像リソースが自動的に追加される。

 以上、3つのタイプの組み込み方法/配置方法について説明した。ここで組み込んだリソースの読み込み方法については、「リソース読込編」で解説している。End of Article

カテゴリ:Windowsフォーム 処理対象:リソース
カテゴリ:クラス・ライブラリ 処理対象:リソース
カテゴリ:Visual Studio .NET 処理対象:リソース
関連TIPS:VS.NETで画像などのリソースを利用するには?(準備編)
関連TIPS:VS.NETで画像などのリソースを利用するには?(読込編)
 
この記事と関連性の高い別の.NET TIPS
VS.NETで画像などのリソースを利用するには?(読込編)
VS.NETで画像などのリソースを利用するには?(準備編)
文字列リソースを活用するには?
独自の.resxファイルの文字列リソースを活用するには?
Xamarin.Forms:アプリのリソースを指定して画像を表示するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間