.NETのGACとは何ですか?


187

リンクではなく、素人向けのGACの簡単な概要を探しているだけです。

回答:


177

そう、基本的には、競合を心配せずにDLLをグローバルにアクセスできるようにする方法です。DLL Hellはもうありません。それぞれのアーキテクチャとバージョンは、それ自身の住む場所を手に入れます。

また、エクスプローラーで独自の方法で閲覧できるので、

C:\ Windows \ assembly

Windowsエクスプローラでは、すべてのDLLが一覧表示されます。

しかし、起動するとcmd、実際の構造がわかります。

C:\ Users \ tritter> cd C:\ Windows \ assembly

C:\ Windows \ assembly> dir

 C:\ Windows \ assemblyのディレクトリ

2009/07/20 02:18 PM <DIR> GAC
2009/06/17 04:22 PM <DIR> GAC_32
2009/06/17 04:22 PM <DIR> GAC_64
2009/06/17 04:22 PM <DIR> GAC_MSIL
 ...をちょきちょきと切る...
               0ファイル0バイト
               9 Dir(s)90,538,311,680 bytes free

C:\ Windows \ assembly> cd GAC_64

C:\ Windows \ assembly \ GAC_64> dir

 C:\ Windows \ assembly \ GAC_64のディレクトリ

2009/06/17 04:22 PM <DIR>。
2009/06/17 04:22 PM <DIR> ..
01/19/2008 09:54 AM <DIR> blbproxy
 ...をちょきちょきと切る...
2008/01/19 09:54 AM <DIR> srmlib
01/19/2008 06:11 AM <DIR> System.Data
01/19/2008 06:11 AM <DIR> System.Data.OracleClient
 ...をちょきちょきと切る...
               0ファイル0バイト
              34 Dir(s)90,538,311,680 bytes free

C:\ Windows \ assembly \ GAC_64> cd System.Data

C:\ Windows \ assembly \ GAC_64 \ System.Data> dir
 C:\ Windows \ assembly \ GAC_64 \ System.Dataのディレクトリ

01/19/2008 06:11 AM <DIR>。
01/19/2008 06:11 AM <DIR> ..
2009年4月11日午後12:20 <DIR> 2.0.0.0__b77a5c561934e089
               0ファイル0バイト
               3 Dir(s)90,538,311,680 bytes free

C:\ Windows \ assembly \ GAC_64 \ System.Data> cd 2.0.0.0__b77a5c561934e089

C:\ Windows \ assembly \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089>ディレクトリ

 C:\ Windows \ assembly \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089のディレクトリ

2009/11/04 12:20 PM <DIR>。
2009年4月11日12:20 PM <DIR> ..
2009年4月11日午後12時12分3,008,512 System.Data.dll
               1ファイル3,008,512バイト
               2 Dir(s)90,538,311,680 bytes free

C:\ Windows \ assembly \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089>

ここでは、System.Dataのバージョン2.0.0.0__b77a5c561934e089を確認できます。

DLLは5つの部分で識別されます。

  1. 名前
  2. バージョン
  3. 建築
  4. 文化
  5. 公開鍵

最初の3つは一般的に大きなものですが。


12
「dll hell」を回避しながら.dllをグローバルに参照する新しい方法であることを伝えるための+1を受け取ります。(もしあなたがdll地獄とは何か、そしてGACがどのようにそれを回避するのかを少し踏み込んだら、もっと良い答えになるでしょう...あなたはそれの基本的な概要を持っています...しかし私は締めますディレクトリ構造の挿入図、およびDLLが識別されて一意である方法のビットを追加)あまりにも否定的に聞こえることを意味しない...私は+1を与えた!
Beska

リンクを提供しないでください:]。回答についての質問です。「3。アーキテクチャ」は「GAC_64」ディレクトリ名で指定されていますか?そして、この場合のカルチャーは空白です-「__」アンダースコアの間にある値ですか?
ダニーブリス

2
GACは.NETアプリにのみ存在しますか?
ザック・スミス

93

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

分解してみましょう:

  • グローバル-マシン全体に適用されます
  • アセンブリ-.NETがコードライブラリ(DLL)と呼ぶもの
  • キャッシュ-より速く/一般的なアクセスのために物を保存する場所

そのため、GACはコードライブラリを格納する場所である必要があり、マシンで実行されているすべてのアプリケーションからアクセスできるようにします。


64

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

共通言語ランタイムがインストールされている各コンピューターには、グローバルアセンブリキャッシュと呼ばれるマシン全体のコードキャッシュがあります。グローバルアセンブリキャッシュには、コンピューター上の複数のアプリケーションによって共有されるように特別に指定されたアセンブリが格納されます。

アセンブリは、必要な場合にのみグローバルアセンブリキャッシュにインストールして共有する必要があります。一般的なガイドラインとして、アセンブリの依存関係をプライベートに保ち、アセンブリの共有が明示的に必要でない限り、アプリケーションディレクトリでアセンブリを見つけます。さらに、アセンブリをグローバルアセンブリキャッシュにインストールして、COM相互運用機能またはアンマネージコードからアクセスできるようにする必要はありません。

MSDNに含まれているものに驚くかもしれませんが、通常は記事のように読むことができます。上部にある単純明快で最も重要な部分は、複雑な詳細がさらに深くなっています。それは確かにそれが私ができるよりもよく説明しています。

Visual Studioは、[ 参照 ] ウィンドウの[.NET]タブのGACにあるすべてのDLLを表示することに注意してください。(ソリューションエクスプローラーでプロジェクトを右クリックし、[参照の追加]を選択します。)これにより、より具体的なアイデアが得られます。


彼はリンクがないと言って、あなた自身の言葉で説明が欲しかったです。
user142350 2009

彼の投稿の元のバージョンでは(彼はすぐに編集したと思います)、それは明記されていませんでした!
ノルドリン2009

15
また、MSDNの言葉は常により良く、より正確になるでしょう。:)
ノルドリン2009


12

グローバルアセンブリキャッシュ(GAC)は、システムで実行されるすべてのアプリケーションによって共有されるように特別に指定された.NETアセンブリを格納するWindowsディレクトリ内のフォルダーです。アセンブリは、グローバルアセンブリキャッシュ(GAC)に登録することで、マシン上の複数のアプリケーション間で共有できます。GACは、.NET Frameworkによって維持される、マシン全体のアセンブリのローカルキャッシュです。


11

Exeアプリケーションは、まず、現在のディレクトリからサブディレクトリへの参照です。そして、システムディレクトリ。VS6.0システムディレクトリは..windows / system32でした。.NETシステムディレクトリは、以下のGACパスのようなものです。

  1. GACパス

    1)C:\ Windows \ Assembly(.NET 2.0〜3.5の場合)

    2)C:\ Windows \ Microsoft.NET \ assembly(.NET 4.0の場合)

  2. アセンブリをGACにインストールする方法(管理者として)

    1)ドラッグアンドドロップ

    2)Visual StudioコマンドプロンプトでGacUtil.exeを使用する

     gacutil -i [Path][Assembly Name].dll
    • 注:アセンブリをGACにインストールするには、アセンブリに厳密な名前を付ける必要があります。そうしないと、次のようなエラーが発生します。
  3. GACからアセンブリをアンインストールする方法(管理者として)

     gacutil -u [Assembly Name], Version=1.0.0.0, PublickeyToken=7896a3567gh
    • 注:拡張子はありません、.dll。バージョンとPublickeyTokenは省略でき、GACアセンブリでチェックできます。

5

これは、物理ファイルとそのインターフェイスおよび場所の情報に関して、COMレジストリが正しく行われているようです。COMでは、ファイルはどこにでもあり、メタデータは一元化されていました。GACは、バンシュートを集中化します。


5

GAC(グローバルアセンブリキャッシュ)は、すべての共有.NETアセンブリが存在する場所です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.