.net column

.NET開発者のためのブログメディア
タスクのイメージ

.NET Frameworkのアセンブリ管理ができるグローバルアセンブリキャッシュ(GAC)とは

2020年04月15日

グローバルアセンブリキャッシュ(GAC)はご存知でしょうか。.NET Frameworkのアプリケーションを開発している方でも、意識されている方は多くないかと思います。これが無いと、DLL地獄が今でも発生して面倒なことになっていたでしょう。ここでは、GACについて改めて確認していきます。

PG
グローバルアセンブリキャッシュって、聞いたことがあるぐらいできちんと理解できていません。どういった機能なのでしょうか?
PM
簡単にいうと、Windowsが搭載されているマシンの全域で共有されるアセンブリキャッシュということですね。詳しくはこれから一緒に確認していきましょう。

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

.NET Frameworkでアプリケーション開発を行う場合、マシン全体で共有するアセンブリの配置場所として、グローバルアセンブリキャッシュが搭載されています。

代表的なアセンブリ(=.DLL)を挙げますと、C#で開発する場合に使用することの多いSystem.dllなどは、GACで管理されています。GACで管理されることによって、どのアプリケーションからでも、言語に関係なくSystem.dllは呼び出すことが可能となります。

かつては、マシンに新しいアプリケーションをインストールすると、共有のアセンブリが上書きされてしまい、今まで正常に動作していたアプリケーションまでもが動かなくなる「DLL地獄」が発生していました。しかし、GACが登場したことで、バージョンも一元管理され、DLL地獄の心配をすることなくインストール等の作業が行えるようになりました。

グローバルアセンブリキャッシュの使用例

GACを使用するには2通りの方法があります。
グローバルアセンブリキャッシュツール(gacutil.exe)とアセンブリキャッシュビューアーです。

    1. グローバルアセンブリキャッシュツール(gacutil.exe)

Visual Studioの開発者用コマンドプロンプトを開きます。今回は共有アセンブリの可用性をチェックします。gacutil.exe /l Microsoft.Transactions.Bridge.Dtcを実行します。
※Microsoft.Transactions.Bridge.Dtcの箇所はアセンブリ名です。
共有アセンブリの可用性をチェック

    1. アセンブリキャッシュビューアー

Windowsのエクスプローラーを開きます。そこに「C:\Windows\assembly」、.NETバージョン4以降であれば「C:\Windows\Microsoft.NET\assembly」と打ち込みます。GACの場所が表示され、ここにドラッグ&ドロップでアセンブリの追加や削除が可能です。

PG
C#の開発を行っていますが、GACに関しては正直言って意識したことなかったです。これからはもう少し意識してみます。
PM
GACのちょっとした概要だけでも知っているか知っていないだけで、開発者としての力量に差が出てくると思いますよ。普段、何気なく開発しているのならば、.NET開発環境の機能についての理解を深めてみるのも良いかもしれませんね。

グローバルアセンブリキャッシュのおかげでDLL地獄から解消されました

GACが搭載されたことで、新しいアプリケーションをインストールすると他のアプリケーションが動作不能の状態に陥る、DLL地獄から解消されました。このことからもわかるように、GACはとても大切な機能ですので、.NET Frameworkアプリケーションの開発に携わるならば、知識として備えておくことおすすめします。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)