.NET TIPS VS.NETで画像などのリソースを利用するには?(組込編) - C# VB.NET Windowsフォーム

 

.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ファイル)のパスからの相対位置を考えて、ファイルを配置する必要があることだ。

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

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

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

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

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

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

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

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

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

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

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





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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える