グローバル アセンブリ キャッシュ

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

グローバル アセンブリ キャッシュ (英:Global Assembly Cacheより転載、略称 : GAC) は、マイクロソフト仕様の共通言語基盤 (英:Common Language Infrastructure、略称 : CLI)においてのコンピューター全域で共有される CLI アセンブリ キャッシュである。

グローバルアセンブリキャッシュは中央リポジトリで特別に管理されており、そのようなアプローチはDLL地獄 のような欠点につながった共有ライブラリの概念の欠陥に伴う落とし穴を避けるために有効である。


必須要件[編集]

GAC 内のアセンブリは異なるコード バージョン間でのサイド バイ サイド実行を可能にする特定のバージョン管理スキームに従う必要がある。具体的には、このようなアセンブリは厳密に命名されている必要がある。

使用法[編集]

GAC を使用するには基本的に2つの方法があり、それらはグローバル アセンブリ キャッシュ ツール (gacutil.exe) と、アセンブリ キャッシュ ビューアー (shfusion.dll)である。


グローバル アセンブリ キャッシュ ツール[編集]

gacutil.exe は .NET 1.1 と .NET SDK で引き続き使用されている、古いコマンド ライン ユーティリティである。[1]


下記のコマンドを使用してGAC内の共有アセンブリの可用性をチェックできる。

gacutil.exe /l <assemblyName>

GACに共有アセンブリを登録するには下記のコマンドを使用する。

gacutil.exe /i <assemblyName>

もしくは下記の場所に共有アセンブリをコピーする。

%windir%\assembly

ただし現在.NET 4.0ではGACの場所は

%windir%\Microsoft.NET\assembly\

であることに注意。 その他のオプションについては、下記のように/?フラッグの使用すると簡易的に説明される。

gacutil.exe /?


アセンブリ キャッシュ ビューアー[編集]

アセンブリ キャッシュ ビューアーは新たなインターフェイスとしてWindows エクスプ ローラーに統合されている。[2]

%Windir%\assembly\ (C:\WINDOWS\assembly など) または %WINDIR%\Microsoft.NET\assembly を参照すると、キャッシュに格納されているアセンブリが、それらのバージョン、カルチャー、公開キー トークン、およびプロセッサ アーキテクチャと共に表示される。アセンブリはドラッグ アンド ドロップ によりインストールされ、選択しdel キーを押すかまたはコンテキスト メニューを使用してアンインストールされる。.NET Framework 4 の導入により、アセンブリ キャッシュ ビューアーのシェル拡張機能は廃止された。[3]

活用例[編集]

一つのコンピューターに 2 つのAssemblyAと名付けられた CLI アセンブリがあり、 1 つはバージョン 1.0 、もう一つはバージョン 2.0 とする。それら両方ともAssemblyAとしてコンパイルされることが必要だが、ファイル名が同じなために双方が一つのFAT32 ファイル システム上の同じディレクトリに存在することはできない。代わりにプログラムは GAC の仮想ファイル システムを使用し、それぞれに必要なバージョンのアセンブリを使用することができる。


実装[編集]

コンストラクトとしては GAC はWindows OS 内には実在しない。GACはCLI によって実装され管理されている。%Systemroot% 内のassemblyと名付けられたフォルダーおよび Microsoft.NET\assembly (.NET 4.0) には、アセンブリのバージョンおよび公開キー トークンが参照できるよう、マネージドファイル名を持ったグローバルに使用できるアセンブリのすべてが含まれている。これによって各バージョンのアセンブリが同じフォルダー内に存在することができ、以降のバージョンは通常のようにコードのエントリ ポイントの場所の保存をせずとも呼び出されることができる。 Windows エクスプ ローラーは、コマンドラインからのインストールが許可されない場合にのみ、このフォルダーにドラッグ アンド ドロップ インストールを行う。 呼び出し元のアプリケーションは、参照時にアセンブリのバージョンを指定し、実行時には単にファイル名を指定することで、正しいバージョンのアセンブリを使用することができる。

落とし穴[編集]

グローバル アセンブリ キャッシュ メカニズムはかつての DLL 地獄を避けるために役立つが、いまだにいくつかの欠点がある。例えば: [4]

  • 既定では、アプリケーションはそのコンパイルに使用された .NET Framework のバージョンでのみ実行可能なので.NET Framework の新しいバージョンがインストールされたマシン上でアプリケーションが失敗する可能性がある—アプリケーションが通常であれば適切に実行されたであろう場合であっても。
  • (アプリケーションで使用する) コア .NET の呼び出しがいくつかのバージョンのみでサポートされている場合、条件付きコンパイルを使用する必要がある。
  • GAC メカニズムであってもネイティブ コードに依存する .NET アプリケーションとは非互換性がある可能性がある。
  • GAC に追加されているすべてのアセンブリは厳密に命名されている必要がある。だがアセンブリの「厳密な名前」を作るプロセスはいくつかの状況下では非常に困難な作業になる。たとえば、アセンブリが厳密に命名されていない別のアセンブリに依存する場合、GAC には登録できない。厳密に命名されていないサード パーティ アセンブリのコードをプログラマが所有していない場合、厳密な名前に変換することは現実的には不可能である。
  • 標準の Windows Api を使用したファイル参照では、エクスプ ローラーがGAC のユーザーフレンドリービューを表示しているとき「アセンブリ」フォルダーの下にある Dll の選択は許されていない。


References[編集]

  1. ^ How to: View the Contents of the Global Assembly Cache”. マイクロソフト. 2010年7月22日閲覧。
  2. ^ John, Mueller (2005年2月11日). “Ten Managed Application Pitfalls that Kill Version Compatibility”. devsource.com. 2008年1月26日閲覧。
  3. ^ How to: View the Contents of the Global Assembly Cache”. マイクロソフト. 2010年7月22日閲覧。
  4. ^ John, Mueller (2005年2月11日). “Ten Managed Application Pitfalls that Kill Version Compatibility”. devsource.com. 2008年1月26日閲覧。

External links[編集]