GAC ใน. NET คืออะไร


187

เพียงแค่มองหาภาพรวมสั้น ๆ ของ GAC สำหรับคนธรรมดาไม่ใช่ลิงค์โปรด

คำตอบ:


177

ถูกต้องดังนั้นโดยทั่วไปมันเป็นวิธีที่ทำให้ DLLs สามารถเข้าถึงได้ทั่วโลกโดยไม่ต้องกังวลเรื่องความขัดแย้ง ไม่มี DLL Hell อีกแล้ว สถาปัตยกรรมและเวอร์ชันแต่ละรุ่นจะมีสถานที่เป็นของตัวเอง

นอกจากนี้ยังทำให้เป็นวิธีการเรียกดูใน Explorer ดังนั้นหากคุณไปที่

C: \ Windows \ ชุมนุม

ใน windows explorer จะแสดง DLLs ทั้งหมด

แต่ถ้าคุณลุกขึ้นcmdคุณจะเห็นว่ามันมีโครงสร้างจริงๆ:

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

C: \ Windows \ ชุมนุม> dir

 ไดเรกทอรีของ 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
 ... บุคคลที่ไม่สำคัญ ...
               0 ไฟล์ 0 ไบต์
               9 Dir ฟรี 90,538,311,680 ไบต์

C: \ Windows \ assembly> cd GAC_64

C: \ Windows \ ประกอบ \ GAC_64> dir

 ไดเรกทอรีของ 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
 ... บุคคลที่ไม่สำคัญ ...
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
 ... บุคคลที่ไม่สำคัญ ...
               0 ไฟล์ 0 ไบต์
              34 Dir 90,538,311,680 ไบต์ฟรี

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

C: \ Windows \ ประกอบ \ GAC_64 \ System.Data> dir
 ไดเรกทอรีของ C: \ Windows \ assembly \ GAC_64 \ System.Data

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 ไฟล์ 0 ไบต์
               3 Dir ฟรี 90,538,311,680 ไบต์

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

C: \ Windows \ ประกอบ \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089> dir

 ไดเรกทอรีของ 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 ไฟล์ 3,008,512 ไบต์
               2 Dir ฟรี 90,538,311,680 ไบต์

C: \ Windows \ ประกอบ \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089>

ที่นี่คุณสามารถดูรุ่น 2.0.0.0__b77a5c561934e089 ของ System.Data

DLL ถูกระบุโดย 5 ส่วน:

  1. ชื่อ
  2. รุ่น
  3. สถาปัตยกรรม
  4. วัฒนธรรม
  5. กุญแจสาธารณะ

แม้ว่า 3 ตัวแรกโดยทั่วไปจะเป็นตัวที่ใหญ่


12
คุณได้รับ +1 สำหรับการกล่าวถึงว่าเป็นวิธีใหม่ในการอ้างอิง. dll ทั่วโลกในขณะที่หลีกเลี่ยง "dll hell" (มันจะเป็นคำตอบที่ดียิ่งขึ้นถ้าคุณเข้าไปในส่วนเล็ก ๆ ของสิ่งที่ dll นรกและวิธี GAC ได้รับรอบ ๆ ... คุณมีโครงร่างพื้นฐานของมัน ... แต่ฉันจะกระชับขึ้น โครงสร้างของไดเรกทอรีแทรกและเพิ่มบิตของวิธีการระบุ dll และไม่ซ้ำกัน) ไม่ได้หมายความว่าจะเสียงเชิงลบเกินไป ... ฉันให้ +1!
Beska

เพียงแค่ไม่มีลิงก์:] คำถามเกี่ยวกับคำตอบของคุณคือ "3. Architecture" ที่ระบุโดยชื่อไดเรกทอรี "GAC_64" หรือไม่ และวัฒนธรรมในกรณีนี้ว่างเปล่า - ค่าที่จะอยู่ระหว่างขีด "__" หรือไม่
Danny Bullis

2
GAC มีอยู่สำหรับแอป. NET เท่านั้นหรือไม่
Zach Smith

93

GAC = แคชสมัชชาสากล

มาทำลายมันกันเถอะ:

  • global - ใช้กับเครื่องทั้งหมด
  • แอสเซมบลี - อะไร. NET เรียกรหัสไลบรารี (DLLs)
  • แคช - สถานที่สำหรับเก็บสิ่งของเพื่อการเข้าถึงที่รวดเร็วขึ้น / ทั่วไป

ดังนั้น GAC จะต้องเป็นที่สำหรับเก็บรหัสไลบรารีเพื่อให้สามารถเข้าถึงแอปพลิเคชันทั้งหมดที่ทำงานบนเครื่อง


64

แคชสมัชชาสากล

คอมพิวเตอร์แต่ละเครื่องที่ติดตั้งรันไทม์ภาษาทั่วไปมีรหัสแคชทั้งเครื่องที่เรียกว่าแคชแอสเซมบลีส่วนกลาง แคชแอสเซมบลีส่วนกลางเก็บแอสเซมบลีที่กำหนดโดยเฉพาะเพื่อใช้ร่วมกันโดยหลายโปรแกรมประยุกต์บนคอมพิวเตอร์

คุณควรแชร์แอสเซมบลีโดยติดตั้งลงในแคชแอสเซมบลีส่วนกลางเท่านั้นเมื่อคุณต้องการ ตามแนวทางทั่วไปให้อ้างอิงแอสเซมบลีส่วนตัวและค้นหาแอสเซมบลีในไดเรกทอรีแอปพลิเคชันเว้นแต่ว่าจำเป็นต้องแชร์แอสเซมบลีอย่างชัดเจน นอกจากนี้ไม่จำเป็นต้องติดตั้งชุดประกอบลงในแคชชุดประกอบส่วนกลางเพื่อให้สามารถเข้าถึง COM interop หรือรหัสที่ไม่มีการจัดการได้

สิ่งที่ MSDN บรรจุอาจทำให้คุณประหลาดใจ ... โดยปกติคุณสามารถอ่านได้เหมือนบทความ บิตที่ตรงไปตรงมาและสำคัญที่สุดที่ด้านบนจะมีรายละเอียดที่สลับซับซ้อนมากขึ้น แน่นอนมันอธิบายได้ดีกว่าที่ฉันสามารถทำได้

โปรดสังเกตว่า Visual Studio แสดง DLLs ทั้งหมดใน GAC ในแท็บ. NET ของหน้าต่างการอ้างอิง (คลิกขวาที่โครงการใน Solution Explorer แล้วเลือกเพิ่มการอ้างอิง) สิ่งนี้จะช่วยให้คุณมีแนวคิดที่เป็นรูปธรรมมากขึ้น


เขาบอกว่าไม่มีการเชื่อมโยงต้องการคำอธิบายในคำพูดของคุณ
user142350

ในโพสต์ต้นฉบับของเขา (ฉันเชื่อว่าเขาแก้ไขได้อย่างรวดเร็ว) นั่นไม่ได้ระบุ!
Noldorin

15
นอกจากนี้คำพูดของ MSDN จะดีขึ้นและแม่นยำยิ่งขึ้นเสมอ :)
Noldorin


12

Global Assembly Cache (GAC) เป็นโฟลเดอร์ในไดเรกทอรี Windows เพื่อเก็บแอสเซมบลี. NET ที่ได้รับการกำหนดเป็นพิเศษให้แบ่งปันโดยแอปพลิเคชันทั้งหมดที่ดำเนินการบนระบบ แอสเซมบลีสามารถใช้ร่วมกันระหว่างแอปพลิเคชันหลายตัวบนเครื่องโดยการลงทะเบียนพวกเขาในส่วนกลางประกอบแคช (GAC) GAC เป็นเครื่องจักรที่แคชภายในของชุดประกอบที่ดูแลโดย. NET Framework


11

แอพลิเคชัน exe ก่อนอื่นอ้างอิงจากไดเรกทอรีปัจจุบันไปยังไดเรกทอรีย่อย จากนั้นไดเรกทอรีระบบ ไดเรกทอรีระบบ VS6.0 คือ .. หน้าต่าง / 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) ใช้ GacUtil.exe พร้อมรับคำสั่ง Visual Studio

     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 รวมศูนย์การยิงปัง


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.