GAC(グローバル・アセンブリ・キャッシュ)からファイルを取り出すには?.NET TIPS

» 2009年03月05日 05時00分 公開
[一色政彦デジタルアドバンテージ]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「.NET TIPS」のインデックス

連載目次

 .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エクスプローラで表示したGACの内容

 実はこの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アセンブリを取り出す方法

 GACから.NETアセンブリの.DLLファイルを取り出すには、Windowsエクスプローラではなく、コマンド・プロンプトを使って、直接ファイル・システムにアクセスすればよい。

●GACのフォルダの内容

 まず、[スタート]メニューから[すべてのプログラム]−[アクセサリ]−[コマンド プロンプト]を選択し、コマンド・プロンプトを表示する。そして、次のように入力し、GACのフォルダに移動する(本稿では「ディレクトリ」を、すべて「フォルダ」と表記している)。

cd %windir%\assembly

 そして、

dir

と入力して、フォルダ内の一覧を表示する。すると、次の画面のように「GAC」「GAC_32」「GAC_MSIL」「NaitiveImage_v2.0.50727_32」「temp」「tmp」というフォルダがあることが分かる。

コマンド・プロンプトで表示されたGACのフォルダ

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。