.NET TIPS

[参照の追加]ダイアログに独自のアセンブリを表示するには?

デジタルアドバンテージ 一色 政彦
2006/06/02

 .NETアプリケーションを開発する際、そのアプリケーションは何らかの外部のアセンブリが持つ機能を利用することになる。例えば、Windowsアプリケーションを開発するには、.NET Frameworkの基本機能が搭載されているSystemアセンブリ(=「System.dll」ファイル)や、Windowsフォーム作成機能を持つSystem.Windows.Formsアセンブリ(=「System.Windows.Forms.dll」ファイル)などを利用しなければならない。

 つまり、これらのアセンブリへの「参照」を(最終的にはコンパイル時に)設定しなければならないのだ。といっても、この参照設定はVisual Studio(.NET 2002/2003および2005)を使って開発を行う場合は非常に簡単だ。次の画面のように、IDEのソリューション・エクスプローラから表示される[参照の追加]ダイアログで、参照したいアセンブリを選択するだけで済むからだ(基本的なアセンブリについてはあらかじめ参照設定されている)。

Visual Studioでの参照の追加手順
Visual Studioを使えば、アセンブリへの参照設定も簡単だ。
  ソリューション・エクスプローラの「参照設定」という項目を右クリックしてコンテキスト・メニューを表示し、[参照の追加]を選択する。これにより、[参照の追加]ダイアログが表示される。
  [参照の追加]ダイアログで、参照設定を追加したいアセンブリを([.NET]タブを開いたページに表示されるコンポーネント一覧の中から)探して選択し、[OK]ボタンを押せば、参照の追加は完了だ。

 しかし独自に作成したアセンブリ(以降、独自アセンブリ)を、この[参照の追加]ダイアログに表示するにはどうすればよいのだろうか。実は、ユーザーが作成した独自アセンブリは、そのままでは、たとえGAC(グローバル・アセンブリ・キャッシュ)にインストールしたとしても、この一覧には表示されないのである。

 そこで本稿では、この[参照の追加]ダイアログの.NETコンポーネント一覧に独自アセンブリを表示する方法を紹介する。

[参照の追加]ダイアログに独自アセンブリを表示する手順

 これを行うには、次の手順を実行すればよい。

  1. 独自アセンブリを配置するフォルダを決定する
  2. そのフォルダをレジストリに登録する

●1. 独自アセンブリを配置するフォルダを決定する

 まずは独自アセンブリ(=.DLLファイルとして作成したクラス・ライブラリ)を格納するフォルダを決定する。本稿の例ではこれを次の場所とする。

「C:\MyAssemblyFolder」

 ちなみに本稿では、このフォルダに独自に作成したMyAssemblyアセンブリ(=「MyAssembly.dll」ファイル)を配置する。

●2. そのフォルダをレジストリに登録する

 次に先ほど決定したフォルダをレジストリに登録するわけだが、この設定をコンピュータ内のすべてのWindowsユーザーで共有するか、それとも現在使用中のユーザーだけにしか適用しないかによって、設定場所が変わってくる。特に理由がなければ、すべてのユーザーで共有する方を選択すればよいだろう。

 すべてのユーザーで設定を共有する場合、具体的には次のキーの配下に、適当な名前のキーを作成する。

【.NET Framework 2.0】「すべてのユーザーで共有する場合」のレジストリ・キー
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx

* キー内にある「v2.0.50727」という文字列部分は.NET Frameworkのバージョン番号を表す。このため、使用するバージョンによって名前が異なってくる。

【.NET Framework 1.x】「すべてのユーザーで共有する場合」のレジストリ・キー
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders

 一方、現在のユーザーのみに適用する場合のキーは次のとおりだ。

【.NET Framework 2.0】「現在のユーザーのみに適用する場合」のレジストリ・キー
HKEY_CURRENT_USER\Software\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx

* 先ほどと同様に、キー内にある「v2.0.50727」という文字列部分は.NET Frameworkのバージョン番号を表す。

【.NET Framework 1.x】「現在のユーザーのみに適用する場合」のレジストリ・キー
HKEY_CURRENT_USER\Software\Microsoft\.NETFramework\AssemblyFolders

 なお筆者の環境では、この「HKEY_CURRENT_USER\Software\Microsoft\.NETFramework」というキーはあらかじめ存在していなかったので、自らキーを作成した。

 取りあえずここでは、.NET Framework 2.0用の「すべてのユーザーで共有する場合」のレジストリ・キーの配下に「MyAssemblyFolder」というキーを作成することにしよう。最終的には、次のキーを作成した。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx\MyAssemblyFolder

 あとは、次の画面の手順で、このキーに含まれる「(既定)」の値を、先ほどのフォルダ名(本稿の例では「C:\MyAssemblyFolder」)に指定するだけだ。

独自アセンブリを格納しているフォルダのレジストリへの登録
レジストリ・エディタを使って、独自アセンブリを格納しているフォルダをレジストリへ登録する。レジストリ・エディタを起動するには、[スタート]メニュー−[ファイル名を指定して実行]を選択して表示されるダイアログで「regedit」と入力し、[OK]ボタンをクリックすればよい。
  .NET Framework 2.0(Visual Studio 2005)の[参照の追加]ダイアログに独自アセンブリを表示したい場合は、「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx\MyAssemblyFolder」というレジストリ・キーを作成する(「v2.0.50727」と「MyAssemblyFolder」は各自の環境に合わせて変えること)。
  「(既定)」の項目をダブルクリックして[文字列の編集]ダイアログを開き、独自アセンブリを格納しているフォルダ名(本稿の例では「C:\MyAssemblyFolder」)を入力する。
  .NET Framework 1.x(Visual Studio .NET 2002/2003)の[参照の追加]ダイアログに独自アセンブリを表示したい場合は、
「HKEY_CURRENT_USER\Software\Microsoft\.NETFramework\AssemblyFolders\MyAssemblyFolder」
というレジストリ・キーを作成する(「MyAssemblyFolder」は各自の環境に合わせて変えること)。

 以上でレジストリへの登録は完了だ。Visual Studioの[参照の追加]ダイアログを開くと、次の画面の例のように、独自アセンブリが表示されるはずだ(ただし、事前にVisual Studioの再起動が必要)。

独自アセンブリが表示されている[参照の追加]ダイアログ
[参照の追加]ダイアログの[.NET]タブを開くと表示されるコンポーネント一覧の中に独自アセンブリ(本稿の例では「MyAssembly」アセンブリ)が表示されるのが確認できるだろう。

GACに登録したアセンブリを[参照の追加]ダイアログに表示するには?

 以上見てきたように、[参照の追加]ダイアログの.NETコンポーネント一覧は、レジストリに登録されたパス情報に基づいて表示されており、GACにインストールされているアセンブリを直接、列挙してくれるわけではない。従って、GACに登録した独自アセンブリであっても、前述の「フォルダを追加してレジストリにそれを登録する」という手順を必ず踏まなければならないというわけだ。

 上記手順に従ってGACに登録した独自アセンブリを[参照の追加]ダイアログに表示されるようにした場合、見た目だけでそのアセンブリがGACにインストールされているかどうかを判別することはできない。だが、参照の追加を行ったアセンブリがGACに登録されているならば、次の画面のように、[ローカル コピー]が自動的に「False」となる(GACにインストールされていないアセンブリの場合は自動的に「True」になる)。非常に気付きにくい違いだが、このように「GACにインストールされているアセンブリへの参照を追加する場合」と「(GACにインストールされていない)通常のアセンブリへの参照を追加する場合」では、若干動作が異なるのである。

GACに登録した独自アセンブリへの参照の追加
GGACにインストールされているアセンブリを参照する場合の動作は、通常のアセンブリのときと違う。
  GACに登録されているアセンブリへの参照を追加する。
  これにより、[ローカル コピー]のプロパティ値が自動的に「False」になる。

 これにより、(フォルダに配置されたアセンブリではなく)GACに登録された.NETコンポーネントが使われるようになる(=無駄なアセンブリのコピー作業が行われなくなる。ちなみに、.NETアプリケーションが実行される仕組みとして、参照しているアセンブリが実際に利用される際には、基本的にディレクトリに配置されたアセンブリよりも優先的にGACにインストールされたものを探しに行くので、ローカルにコピーしようがしまいが基本的にGACにインストールされたアセンブリが使われるはずだ)。End of Article

カテゴリ:Visual Studio 2005 処理対象:IDE

この記事と関連性の高い別の.NET TIPS
GAC(グローバル・アセンブリ・キャッシュ)からファイルを取り出すには?
無償の逆コンパイラ「ILSpy」を利用するには?
Visual Studio 2005でバージョン情報を設定するには?
レジストリの値を取得するには?
GAC(グローバル・アセンブリ・キャッシュ)の内容をエクスプローラで通常表示するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム 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 記事ランキング

本日 月間