グローバル アセンブリ キャッシュ
グローバル アセンブリ キャッシュ メカニズムはかつてのDLL地獄を避けるために役立つが、いまだにいくつかの欠点がある。例えば下記のようなものが挙げられる。
既定では、アプリケーションはそのコンパイルに使用された.NET Frameworkのバージョンでのみ実行可能なので、.NET Frameworkの新しいバージョンがインストールされたマシン上でアプリケーションが失敗する可能性がある(たとえアプリケーションが新しいバージョンとともに適切に通常実行されるであろう場合であっても)。
(アプリケーションで使用する) コア.NETの呼び出しがいくつかのバージョンのみでサポートされている場合、条件付きコンパイルを使用する必要がある。
GACメカニズムであっても、ネイティブ コードに依存する.NETアプリケーションは、非互換性のリスクがある。
GACに追加されているすべてのアセンブリは厳密に命名されている必要がある。だがアセンブリの「厳密な名前」を作るプロセスはいくつかの状況下では非常に困難な作業になる。たとえば、アセンブリが厳密に命名されていない別のアセンブリに依存する場合、GACには登録できない。厳密に命名されていないサード パーティ アセンブリのコードをプログラマが所有していない場合、厳密な名前に変換することは現実的には不可能である。
標準のWindows APIを使用したファイル参照では、エクスプローラーがGACのユーザーフレンドリービューを表示しているとき "assembly" フォルダーの下にあるDLLの選択は許されていない。
1つのコンピューターに"AssemblyA"と名付けられた2つのCLIアセンブリがあり、 1つはバージョン1.0、もう1つはバージョン2.0とする。それらは両方とも"AssemblyA"としてコンパイルされることが必要だが、ファイル名が同じなために双方が1つのFAT32ファイル システム上の同じディレクトリに存在することはできない。代わりにプログラムはGACの仮想ファイル システムを使用し、それぞれに必要なバージョンのアセンブリを使用することができる。