Apa itu GAC di .NET?


187

Hanya mencari ikhtisar singkat GAC untuk orang awam, bukan tautan.

Jawaban:


177

Benar, jadi pada dasarnya ini adalah cara untuk menjaga agar DLL dapat diakses secara global tanpa khawatir tentang konflik. Tidak ada lagi DLL Hell. Setiap arsitektur dan versi mendapatkan tempat tinggalnya sendiri.

Itu juga mendapatkan caranya sendiri untuk menjelajahinya di Explorer, jadi jika Anda pergi ke

C: \ Windows \ assembly

Di windows explorer ia mencantumkan semua DLL.

Tetapi jika Anda menyalakan cmd, Anda dapat melihat bagaimana itu benar-benar terstruktur:

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

C: \ Windows \ assembly> dir

 Direktori C: \ Windows \ assembly

07/20/2009 02:18 PM <DIR> GAC
06/17/2009 16:22 PM <DIR> GAC_32
06/17/2009 16:22 PM <DIR> GAC_64
06/17/2009 16:22 PM <DIR> GAC_MSIL
 ...menggunting...
               0 File 0 byte
               9 Dir (s) 90.538.311.680 byte gratis

C: \ Windows \ assembly> cd GAC_64

C: \ Windows \ assembly \ GAC_64> dir

 Direktori C: \ Windows \ assembly \ GAC_64

06/17/2009 16:22 PM <DIR>.
06/17/2009 16:22 PM <DIR> ..
01/19/2008 09:54 AM <DIR> blbproxy
 ...menggunting...
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
 ...menggunting...
               0 File 0 byte
              34 Dir (s) 90.538.311.680 byte gratis

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

C: \ Windows \ assembly \ GAC_64 \ System.Data> dir
 Direktori 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 0 byte
               3 Dir (s) 90.538.311.680 byte gratis

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

 Direktori 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 3.008.512 byte
               2 Dir (s) 90.538.311.680 byte gratis

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

Di sini Anda dapat melihat versi 2.0.0.0__b77a5c561934e089 dari System.Data.

DLL diidentifikasi oleh 5 bagian:

  1. Nama
  2. Versi: kapan
  3. Arsitektur
  4. Budaya
  5. Kunci Publik

Meskipun 3 yang pertama umumnya yang besar.


12
Anda mendapatkan +1 untuk menyebutkan bahwa ini adalah cara baru untuk memiliki referensi global .dlls sambil menghindari "dll neraka". (Ini akan menjadi jawaban yang lebih baik jika Anda masuk ke sedikit tentang apa sih dll, dan bagaimana GAC ​​mengatasinya ... Anda sudah punya garis besar dasar itu ... tapi saya hanya akan memperketat inset struktur direktori, dan tambahkan sedikit bagaimana dll diidentifikasi dan unik) Jangan bermaksud terdengar terlalu negatif ... Saya memang memberi +1!
Beska

Hanya saja, jangan berikan tautan:]. Pertanyaan tentang jawaban Anda, apakah "3. Arsitektur" ditentukan oleh nama direktori "GAC_64"? Dan apakah Budaya dalam kasus ini kosong - nilai yang akan berada di antara "__" garis bawah?
Danny Bullis

2
Apakah GAC hanya ada untuk aplikasi .NET?
Zach Smith

93

GAC = Global Assembly Cache

Mari kita jabarkan:

  • global - berlaku untuk seluruh mesin
  • assembly - apa. NET menyebutnya code-libraries (DLLs)
  • cache - tempat menyimpan sesuatu untuk akses yang lebih cepat / umum

Jadi GAC harus menjadi tempat untuk menyimpan pustaka kode sehingga dapat diakses oleh semua aplikasi yang berjalan pada mesin.


64

Tembolok Perakitan Global

Setiap komputer tempat runtime bahasa umum diinstal memiliki cache kode seluruh mesin yang disebut cache perakitan global. Cache rakitan global menyimpan rakitan yang khusus dirancang untuk dibagikan oleh beberapa aplikasi di komputer.

Anda harus berbagi rakitan dengan menginstalnya ke cache rakitan global hanya jika diperlukan. Sebagai pedoman umum, jaga dependensi rakitan agar tetap pribadi, dan cari rakitan di direktori aplikasi kecuali jika berbagi rakitan diperlukan secara eksplisit. Selain itu, tidak perlu memasang rakitan ke cache rakitan global agar dapat diakses oleh COM interop atau kode yang tidak dikelola.

Hal-hal yang dikandung MSDN mungkin mengejutkan Anda ... Anda biasanya dapat membacanya seperti artikel. Bit langsung dan paling penting di bagian atas, detail rumit lebih dalam. Ini jelas menjelaskan lebih baik daripada yang saya bisa.

Perhatikan bahwa Visual Studio menampilkan semua DLL di GAC di .NET tab pada jendela Referensi . (Klik kanan pada proyek di Solution Explorer dan pilih Add Reference.) Ini akan memberi Anda ide yang lebih menarik.


Dia mengatakan tidak ada tautan, ingin penjelasan dengan kata-kata Anda sendiri.
user142350

Dalam versi asli dari postingannya (saya yakin dia mengeditnya dengan cepat), itu tidak ditentukan!
Noldorin

15
Juga, kata-kata MSDN akan selalu menjadi lebih baik dan lebih akurat. :)
Noldorin


12

Global Assembly Cache (GAC) adalah folder di direktori Windows untuk menyimpan .NET assemblies yang secara khusus dirancang untuk dibagikan oleh semua aplikasi yang dijalankan pada suatu sistem. Assemblies dapat dibagikan di antara banyak aplikasi pada mesin dengan mendaftarkannya di cache Assembly global (GAC). GAC adalah mesin lebar cache lokal majelis yang dikelola oleh .NET Framework.


11

Aplikasi Exe, pertama-tama, referensi dari direktori saat ini ke subdirektori. Dan kemudian, direktori sistem. Direktori sistem VS6.0 adalah ..windows / system32. Direktori sistem .NET seperti jalur GAC di bawah ini.

  1. Jalur GAC

    1) C: \ Windows \ Assembly (untuk .NET 2.0 ~ 3.5)

    2) C: \ Windows \ Microsoft.NET \ assembly (untuk .NET 4.0)

  2. Cara memasang rakitan ke GAC (sebagai Administrator)

    1) Seret dan Jatuhkan

    2) Gunakan GacUtil.exe dengan Visual Studio Command Prompt

     gacutil -i [Path][Assembly Name].dll
    • Catatan: Untuk memasang rakitan ke GAC, rakitan harus diberi nama kuat. Kalau tidak, Anda mendapatkan kesalahan seperti ini: Gagal menambahkan rakitan ke cache: Mencoba memasang rakitan tanpa nama yang kuat.
  3. Cara menghapus instalan perakitan dari GAC (sebagai Administrator)

     gacutil -u [Assembly Name], Version=1.0.0.0, PublickeyToken=7896a3567gh
    • Catatan: tidak memiliki ekstensi, .dll. Versi dan PublickeyToken dapat dihilangkan dan diperiksa di perakitan GAC.

5

Ini seperti registri COM dilakukan dengan benar, sehubungan dengan file fisik serta informasi antarmuka dan lokasi mereka. Dalam COM, file ada di mana-mana, dengan metadata terpusat. GAC memusatkan tembakan bang.


5

GAC (Global Assembly Cache) adalah tempat semua .NET assembly berada.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.