グローバル アセンブリ キャッシュ (GAC)
グローバル アセンブリ キャッシュ (Global Assembly Cache、略称:GAC) は、
マイクロソフトの
共通言語基盤 (CLI) において、コンピューター全体でアセンブリを共有するための特別なメカニズムです。この仕組みは、特に DLL 地獄と呼ばれる問題を避けるために設計されました。
DLL地獄とは、複数のアプリケーションが同じライブラリの異なるバージョンを要求した場合に発生する、互換性問題を指します。GACは、そういった問題を回避するための中央リポジトリとして機能します。
必須要件
GAC内に格納されるアセンブリは、異なるバージョン間での共存を実現するために、特定の命名規則を満たす必要があります。これにより、アプリケーションが必要とする特定のバージョンを柔軟に使用できるようになります。例えば、同じ名前のアセンブリでも、異なるバージョンが存在できるため、アプリケーションは互いの競合を避けることができます。
使用法
GACを利用するには、主に二つの方法があります。ひとつは、グローバル アセンブリ キャッシュ ツール (gacutil.exe) を使用する方法、もうひとつはアセンブリ キャッシュ ビューアー (shfusion.dll) を使う方法です。
GACツール (gacutil.exe)
gacutil.exeは、
.NET 1.1から利用可能なコマンドライン ベースのツールで、共有アセンブリの登録やリスト表示を行うことができます。例えば、以下のコマンドを使って特定のアセンブリの可用性を確認することができます。
```bash
gacutil.exe /l
```
また、特定のアセンブリをGACに登録するためには、以下のコマンドを使用します。
```bash
gacutil.exe /i
```
注意すべき点は、
.NET 4以降ではGACのストレージパスが変更されていることです。
アセンブリ キャッシュ ビューアー
アセンブリ キャッシュ ビューアーは、Windowsエクスプローラーの新しいインターフェースに統合されており、アセンブリが格納されているフォルダーを直接参照することを可能にします。ここでは、アセンブリのバージョン、カルチャー、公開キー トークン、プロセッサ アーキテクチャなどの情報が表示されます。また、アセンブリをドラッグ アンド ドロップしてインストールしたり、削除する際には選択したアセンブリにDeleteキーを押したり、コンテキストメニューを利用することで簡単に行えます。なお、
.NET 4の導入により、アセンブリキャッシュビューアーの一部機能は廃止されました。
活用例
例えば、あるコンピューター上に「AssemblyA」と名付けられた二つのバージョンが存在するとしましょう。一つがバージョン1.0、もう一つがバージョン2.0です。これらは同じ名前であるため、通常のファイルシステムでは同じディレクトリには共存できません。しかし、GACを利用することで、異なるバージョンを同時に利用することが可能です。プログラムはGACを利用して、必要なバージョンのアセンブリを適切に選択できます。
実装
GAC自体は物理的に存在するものではなく、CLIによって管理されます。Windowsのシステムフォルダーに「assembly」や「Microsoft
.NET\assembly」と名付けられたフォルダーが存在し、ここにアセンブリのバージョン情報や公開キー トークンが含まれています。これにより、同一のフォルダー内に異なるバージョンのアセンブリが配置されても問題ありません。プログラムは呼び出す際にバージョンを指定することで、正確なアセンブリを取得することができます。
注意点
GACには利点がある一方でいくつかの欠点も存在します。具体的に、アプリケーションはその開発時に使用した
.NET Frameworkのバージョンでのみ実行可能であるため、新しいバージョンがインストールされた環境でアプリケーションが動かない場合があります。また、アセンブリは厳密に命名する必要がありますが、このプロセスは依存関係により複雑になることがあります。さらに、GACへの追加は、厳密に命名されたアセンブリである必要があり、これが実現できない場合は登録ができません。
このように、グローバル アセンブリ キャッシュは有用なツールですが、利用する際はその特性と注意点を理解しておくことが大切です。