2009-08-12 10 views
130

Sadece bir katman için GAC'a kısa bir genel bakış arıyorsanız, lütfen bir bağlantı değil..NET'te GAC nedir?

+9

sen NEDEN bağlantılı cevaplara açar mısınız? –

+0

Bazı kullanıcı uygulamalarında belki de bir hata mesajına tepki veriyor musunuz? – Jeff

+47

@JB King: Bir teknik özellik veya ezoterik bir yazıdan ziyade .NET ile deneyimlenen birinden basit terimlerle duymayı seviyorum. – Nosrama

cevap

125

Doğru, yani temelde, DLL'leri çatışmaları endişelendirmeden dünya çapında erişilebilir bir yoludur. Artık DLL Cehennem yok. Her mimari ve sürüm, yaşamak için kendi yerini alır.

Aynı zamanda Explorer'da bunu göz atmak kendi yolu alır, bu yüzden

C giderseniz: pencerelerinde \ Windows \ montaj

tüm dll listeler kaşifi.

Ama cmd kadar ateş edersen, sen gerçekten yapılandırılmış nasıl görebilirsiniz: Burada

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

C:\Windows\assembly>dir 

Directory of C:\Windows\assembly 

07/20/2009 02:18 PM <DIR>   GAC 
06/17/2009 04:22 PM <DIR>   GAC_32 
06/17/2009 04:22 PM <DIR>   GAC_64 
06/17/2009 04:22 PM <DIR>   GAC_MSIL 
...snip... 
       0 File(s)    0 bytes 
       9 Dir(s) 90,538,311,680 bytes free 

C:\Windows\assembly>cd GAC_64 

C:\Windows\assembly\GAC_64>dir 

Directory of C:\Windows\assembly\GAC_64 

06/17/2009 04:22 PM <DIR>   . 
06/17/2009 04:22 PM <DIR>   .. 
01/19/2008 09:54 AM <DIR>   blbproxy 
...snip... 
01/19/2008 09:54 AM <DIR>   srmlib 
01/19/2008 06:11 AM <DIR>   System.Data 
01/19/2008 06:11 AM <DIR>   System.Data.OracleClient 
...snip... 
       0 File(s)    0 bytes 
       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 
Directory of C:\Windows\assembly\GAC_64\System.Data 

01/19/2008 06:11 AM <DIR>   . 
01/19/2008 06:11 AM <DIR>   .. 
04/11/2009 12:20 PM <DIR>   2.0.0.0__b77a5c561934e089 
       0 File(s)    0 bytes 
       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>dir 

Directory of C:\Windows\assembly\GAC_64\System.Data\2.0.0.0__b77a5c561934e089 

04/11/2009 12:20 PM <DIR>   . 
04/11/2009 12:20 PM <DIR>   .. 
04/11/2009 12:12 PM   3,008,512 System.Data.dll 
       1 File(s)  3,008,512 bytes 
       2 Dir(s) 90,538,311,680 bytes free 

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

Eğer System.Data sürümünü 2.0.0.0__b77a5c561934e089 görebilirsiniz.

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

  1. Adı
  2. Versiyon
  3. Mimarlık
  4. Kültür
  5. Açık Anahtar

ilk 3 genellikle büyük olmasına rağmen olanlar.

+8

"dll cehennem" den kaçınarak, global başvuru kaynağı .dlls için yeni bir yol olduğunu belirtmek için bir +1 olsun. (Cehennemdeyken neyin cehenneme gittiğini ve GAC'ın etrafından nasıl geçtiğini anlamanız daha iyi bir cevap olurdu ... bunun temel taslağı var ... ama ben sadece sıkılaştım. dizin yapısını ekleyin ve dll'nin nasıl tanımlandığını ve benzersiz olduğunu biraz ekleyin) Çok olumsuz gelmek istemiyorum ... +1 verdim! – Beska

+0

Sadece bir bağlantı sağlamayın:]. Cevabınız ile ilgili soru, "GAC_64" dizin adıyla belirtilen "3. Mimari" dir? Ve bu durumda Boşluk kültürüdür - "__" altçizgi arasındaki değer nedir? –

+0

GAC yalnızca .NET uygulamaları için var mı? –

54

Global Assembly Cache

ortak dil çalışma zamanı yüklü Her bilgisayar bir makine genelindeki kod önbelleği genel derleme önbelleği denilen vardır. Genel derleme önbellekleri, bilgisayarında bilgisayarında paylaşılan çeşitli uygulamalar tarafından özel olarak paylaşımlarını derler.

Montajları ürününü, yalnızca ihtiyaç duyduğunuzda genel derleme önbelleğine yükleyerek paylaşmalısınız. Genel bir kılavuz olarak, montajı açık bir şekilde paylaşmadıkça, bağımlılıklarını özel olarak saklayın ve dizini uygulamada dizini bulun. Ayrıca, numaralı derlemelerini, COM interop veya unmanaged kod için erişilebilir hale getirmek için genel derleme önbelleğine yüklemek gerekli değildir.

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

Visual Studio'nun, Başvurusu penceresinin .NET sekmesindeki GAC'deki tüm DLL dosyalarını 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 makul bir fikir vermelidir.

+0

Hiç bağlantı olmadığını söyledi, kendi sözlerinle ilgili bir açıklama istedi. – user142350

+0

Bağlantı yok dedi ... –

+0

Gönderinin orijinal versiyonunda (hızlıca düzenlediğine inanıyorum), bu belirtilmemişti! – Noldorin

19

Merkezi DLL kitaplığı.

61

GAC = genel birleştirme önbelleği

en yıkmak edelim: Küresel

  • -
  • düzeneği, tüm makine için geçerlidir - NET onun kod kitaplıkları (DLL)
  • adlandırdığı önbellek - daha hızlı/ortak erişim için öğeleri depolamak için bir yer

GAC, depolanacak bir yer olmalı Kod kütüphaneleri, böylece makinede çalışan tüm uygulamalara erişebilirler.

5

Bu, fiziksel dosyalarının yanı sıra arabirimleri ve konum bilgileriyle ilgili olarak doğru yapılan COM kayıt defteri gibidir. COM'da, dosyalar her yerdeydi ve merkezi meta veriler vardı. GAC, patlama ateşini merkezileştiriyor.

5

GAC (Genel Kurulum Önbelleği), tüm paylaşılan .NET derlemesinin bulunduğu yerdir.

6

Genel Kurul Önbelleği (GAC), Windows dizinindeki bir sistemde yürütülen tüm uygulamalar tarafından paylaşılmak üzere özel olarak tasarlanmış .NET derlemelerini depolayan bir klasördür. Montajlar, makinedeki birçok uygulama arasında, bunları Genel Montaj önbelleğine (GAC) kaydederek paylaşılabilir. GAC, .NET Framework tarafından sürdürülen bir makinenin yerel bir önbellek derlemesidir.

6

Exe Uygulaması, 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 yoluna benzer.

  1. GAC yolu

    1) C: \ Windows \ Assembly (NET 2.0 için ~ 3,5)

    2) C: \ WINDOWS \ Micorosoft.NET \ montaj (için .NET 4.0)

    ) Yönetici olarak (GAC içine

    1) Sürükle bir derleme yüklemek ve Bırak nasıl

  2. 2) GacUtil'i kullanın.Visual Studio Komutanlığı ile exe

    gacutil -i [Path][Assembly Name].dll 
    
    • Not istemi: GAC içine bir derleme yüklemek için, Derleme kesin adlandırılmış olması gerekir. Aksi takdirde böyle bir hatayla karşılaşırsınız: Önbellekteki derleme eklenemedi: Güçlü bir ad olmadan bir montaj yüklemeyi deneyin.
  3. Nasıl (Yönetici olarak) GAC

    gacutil -u [Assembly Name], Version=1.0.0.0, PublickeyToken=7896a3567gh 
    
    • Not bir derleme kaldırmaya: hayır genişleme vardır, .dll. Sürüm ve PublickeyToken ihmal edilebilir ve GAC montajında ​​kontrol edilebilir. MSDN veya Wikipedia istediğini için yeterli değil gibi