.NET'te GAC nedir?


187

Sadece bir layman için GAC kısa bir genel bakış arıyorsunuz, bir bağlantı değil lütfen.

Yanıtlar:


177

Doğru, temel olarak, DLL'leri çatışmalar hakkında endişelenmeden küresel olarak erişilebilir tutmanın bir yoludur. Artık DLL Hell yok. Her mimari ve sürüm, yaşamak için kendi yerini alır.

Ayrıca Explorer'da göz atmanın kendi yolunu da alır, bu nedenle

C: \ Windows \ montaj

Windows Gezgini'nde tüm DLL'leri listeler.

Ancak ateş cmdederseniz, bunun nasıl yapılandırıldığını görebilirsiniz:

C: \ Kullanıcılar \ tritter> cd C: \ Windows \ assembly

C: \ Windows \ montaj> dir

 C: \ Windows \ assembly dizini

07/20/2009 02:18 PM <DIR> GAC
17.06.2009 04:22 <DIR> GAC_32
17.06.2009 04:22 <DIR> GAC_64
17.06.2009 04:22 <DİR> GAC_MSIL
 ... kesik ...
               0 Dosya 0 bayt
               9 Dir (s) 90.538.311.680 bayt boş

C: \ Windows \ assembly> cd GAC_64

C: \ Windows \ montaj \ GAC_64> dir

 C: \ Windows \ assembly \ GAC_64 dizini

17.06.2009 04:22 <DİR>.
17.06.2009 04:22 <DIR> ..
01/19/2008 09:54 AM <DIR> Instagram Hesabındaki Resim ve Videoları blbproxy
 ... kesik ...
01/19/2008 09:54 AM <DIR> srmlib
01/19/2008 06:11 <DIR> System.Data
01/19/2008 06:11 <DIR> System.Data.OracleClient
 ... kesik ...
               0 Dosya 0 bayt
              34 Dir (s) 90.538.311.680 bayt boş

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

C: \ Windows \ montaj \ GAC_64 \ System.Data> dir
 C: \ Windows \ assembly \ GAC_64 \ System.Data dizini

01/19/2008 06:11 <DIR>.
01/19/2008 06:11 <DIR> ..
04/11/2009 12:20 PM <DIR> 2.0.0.0__b77a5c561934e089
               0 Dosya 0 bayt
               3 Dir (s) 90.538.311.680 bayt boş

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

C: \ Windows \ montaj \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089> dir

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

04/11/2009 12:20 <DİR>.
04/11/2009 12:20 <DIR> ..
11/04/2009 12:12 PM 3.008.512 System.Data.dll
               1 Dosya 3.008.512 bayt
               2 Dir (s) 90.538.311.680 bayt boş

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

Burada System.Data'nın 2.0.0.0__b77a5c561934e089 sürümünü görebilirsiniz.

Bir DLL 5 bölümle tanımlanır:

  1. ad
  2. versiyon
  3. Mimari
  4. Kültür
  5. Genel anahtar

Her ne kadar ilk 3 genellikle büyük olanlar olsa da.


12
"Dll cehennem" kaçınarak global olarak .dlls başvurmak için yeni bir yol olduğunu belirtmek için bir +1 olsun. (Dll cehenneminin küçük bir kısmına ve GAC'ın etrafına nasıl girdiğine girerseniz daha iyi bir cevap olurdu ... bunun temel taslağı var ... ama sadece sıkılaştırırdım dizin yapısı iç metin, ve dll nasıl tanımlanır ve benzersiz biraz ekleyin) Çok olumsuz ses demek istemiyorum ... +1 verdim!
Beska

Sadece bağlantı vermeyin:]. Cevabınızla ilgili soru, "3. Mimari" "GAC_64" dizin adıyla belirtilmiş mi? Ve bu durumda Kültür boş mu - "__" alt çizgileri arasında olacak değer?
Danny Bullis

2
GAC yalnızca .NET uygulamaları için var mı?
Zach Smith

93

GAC = Global Montaj Önbelleği

Hadi yıkalım:

  • global - tüm makine için geçerlidir
  • derleme - .NET'in kod kitaplıklarını (DLL) çağırdığı
  • önbellek - daha hızlı / ortak erişim için bir şeyler depolamak için bir yer

Bu nedenle GAC, kod kitaplıklarının saklanabileceği bir yer olmalıdır, böylece makinede çalışan tüm uygulamalar tarafından erişilebilir.


64

Global Montaj Önbelleği

Ortak dil çalışma zamanının yüklü olduğu her bilgisayarda, genel derleme önbelleği adı verilen makine çapında bir kod önbelleği bulunur. Genel derleme önbelleği, bilgisayardaki çeşitli uygulamalar tarafından paylaşılmak üzere özel olarak tasarlanmış derlemeleri depolar.

Derlemeleri yalnızca gerektiğinde genel derleme önbelleğine yükleyerek paylaşmalısınız. Genel bir kılavuz olarak derleme bağımlılıklarını gizli tutun ve derlemenin paylaşılması açıkça gerekli olmadıkça derlemeleri uygulama dizininde bulun. Ayrıca, COM birlikte çalışma veya yönetilmeyen kod tarafından erişilebilir hale getirmek için derlemeleri genel derleme önbelleğine yüklemek gerekmez.

MSDN'in içerdiği şeyler sizi şaşırtabilir ... genellikle bir makale gibi okuyabilirsiniz. Üstteki basit ve en önemli bitler, karmaşık detaylar daha derinlere iner. Kesinlikle benden daha iyi açıklıyor.

Visual Studio, başvurular penceresinin .NET sekmesindeki GAC tüm DLL'leri görüntülediğini unutmayın . (Solution Explorer'da bir projeye sağ tıklayın ve Referans Ekle'yi seçin.) Bu size daha somut bir fikir vermelidir.


Bağlantı yok dedi, kendi sözlerinle açıklama istedi.
user142350

Gönderinin orijinal versiyonunda (hızlı bir şekilde düzenlediğine inanıyorum), bu belirtilmedi!
Noldorin

15
Ayrıca, MSDN'nin sözleri her zaman daha iyi ve daha doğru olacaktır. :)
Noldorin


12

Genel Derleme Önbelleği (GAC), Windows dizininde, sistemde yürütülen tüm uygulamalar tarafından paylaşılmak üzere özel olarak tasarlanmış .NET derlemelerini depolayan bir klasördür. Montajlar, makinede birden çok uygulama arasında global Assembly önbelleğine (GAC) kaydedilerek paylaşılabilir. GAC, makine genelinde .NET Framework tarafından tutulan yerel bir montaj önbelleğidir.


11

Exe Application, her şeyden önce geçerli bir dizinden bir alt dizine başvurur. Ve sonra, sistem dizini. VS6.0 sistem dizini ..windows / system32 idi. .NET sistem dizini aşağıdaki GAC yolu gibidir.

  1. GAC yolu

    1) C: \ Windows \ Assembly (.NET 2.0 ~ 3.5 için)

    2) C: \ Windows \ Microsoft.NET \ assembly (.NET 4.0 için)

  2. GAC'ye bir montaj nasıl kurulur (Yönetici olarak)

    1) Sürükle ve Bırak

    2) GacUtil.exe'yi Visual Studio Komut İstemi ile kullanma

     gacutil -i [Path][Assembly Name].dll
    • Not: Bir montajı GAC'ye kurmak için montajın kesinlikle adlandırılması gerekir. Aksi takdirde şöyle bir hata alırsınız: Önbelleğe montaj eklenemedi: Güçlü bir ad olmadan bir montaj kurmaya çalışın.
  3. Bir montajı GAC'den kaldırma (Yönetici olarak)

     gacutil -u [Assembly Name], Version=1.0.0.0, PublickeyToken=7896a3567gh
    • Not: .dll uzantısı yoktur. Sürüm ve PublickeyToken atlanabilir ve GAC montajında ​​kontrol edilebilir.

5

Bu, fiziksel dosyaların yanı sıra arayüz ve konum bilgileri açısından COM kayıtlarının doğru yapılması gibidir. COM'da, dosyalar merkezi meta verilerle her yerdeydi. GAC patlama atışını merkezileştirir.


5

GAC (Global Assembly Cache), paylaşılan tüm .NET derlemelerinin bulunduğu yerdir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.