この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
.NETでは、共有アセンブリ(=.DLLファイル)の配置場所としてGAC(グローバル・アセンブリ・キャッシュ)が提供されている。
従来、Windows用のプログラムは(バージョン管理機能を備えていない)通常のシステム・フォルダを共有場所として使っていたため、(主に何らかのプログラムをインストールしたときに)古いバージョンの共有.DLLファイルで、すでにインストールされている新しいバージョンの共有.DLLファイルが上書きされてしまい、既存のプログラムが正常に動作しなくなるなど、いわゆる「DLL地獄」の問題が発生することがあった。このような問題に対し、.NETではバージョン管理機能を備える共有アセンブリ管理システムとしてGACが提供されるようになった。
実際に、.NET Frameworkの基本ライブラリ(例えば「System.dll」ファイルなどのアセンブリ群)はGACで管理され、すべての.NETプログラムで共有利用されている。しかもそのライブラリのすべてのバージョン(CLR 1.0/1.1/2.0)がGACで一元管理されており、システム管理者は「DLL地獄」の問題を一切気にする必要がなくなっている。
このGACは、具体的には次の場所(=パス)に存在する(「%windir%」は通常は「C:\Windows」)。
%windir%\assembly
このパスに、例えばWindowsエクスプローラでアクセスすると、次の画面のように.NETアセンブリが一覧表示され、同じファイル名でバージョンだけが異なるものも並列に表示される(次の画面では3つのバージョンの「System」アセンブリが並んで表示されている)。
実はこのWindowsエクスプローラは、実際の物理フォルダの構造をそのまま表示しているわけではなく、システム管理や開発者が.NETアセンブリを一覧したり、管理したり(.NETアセンブリのインストールやアンインストールなど)しやすいようにする目的で提供されている「仮想ビュー」*1なのである。
*1 この仮想ビューは、shfusion.dllファイルによるWindowsエクスプローラのシェル拡張によるもので、正式名称は「Assembly Cache Viewer(アセンブリ・キャッシュ・ビューア)」である(このファイルは「C:\Windows\Microsoft.NET\Framework\v2.0.50727」フォルダ内にある)。
この仮想ビューのおかげで、GAC内のアセンブリを効率的に参照できるというメリットがあるわけだが、一方で制限もある。具体的には、この仮想ビューでは、GACから.NETアセンブリをコピーしようとしてもコピーできないのだ。そこで本稿では、GACから.NETアセンブリを取り出す方法を紹介する。
GACから.NETアセンブリの.DLLファイルを取り出すには、Windowsエクスプローラではなく、コマンド・プロンプトを使って、直接ファイル・システムにアクセスすればよい。
●GACのフォルダの内容
まず、[スタート]メニューから[すべてのプログラム]−[アクセサリ]−[コマンド プロンプト]を選択し、コマンド・プロンプトを表示する。そして、次のように入力し、GACのフォルダに移動する(本稿では「ディレクトリ」を、すべて「フォルダ」と表記している)。
cd %windir%\assembly
そして、
dir
と入力して、フォルダ内の一覧を表示する。すると、次の画面のように「GAC」「GAC_32」「GAC_MSIL」「NaitiveImage_v2.0.50727_32」「temp」「tmp」というフォルダがあることが分かる。
Copyright© Digital Advantage Corp. All Rights Reserved.