GAC trong .NET là gì?


187

Chỉ cần tìm một cái nhìn tổng quan ngắn về GAC cho một giáo dân, không phải là một liên kết xin vui lòng.

Câu trả lời:


177

Đúng vậy, về cơ bản, đó là cách để giữ DLL có thể truy cập toàn cầu mà không phải lo lắng về xung đột. Không còn địa ngục DLL. Mỗi kiến ​​trúc và phiên bản có nơi ở riêng.

Nó cũng có cách riêng để duyệt nó trong Explorer, vì vậy nếu bạn đi đến

C: \ Windows \ lắp ráp

Trong windows explorer nó liệt kê tất cả các DLL.

Nhưng nếu bạn kích hoạt cmd, bạn có thể thấy nó thực sự có cấu trúc như thế nào:

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

C: \ Windows \ assembly> dir

 Thư mục của C: \ Windows \ assembly

20/07/2009 02:18 PM <TRỰC TIẾP> GAC
17/12/2009 04:22 PM <TRỰC TIẾP> GAC_32
17/12/2009 04:22 PM <TRỰC TIẾP> GAC_64
17/12/2009 04:22 PM <TRỰC TIẾP> GAC_MSIL
 ... bắn tỉa ...
               0 Tệp 0 byte
               9 Dir (s) 90,538,311,680 byte miễn phí

C: \ Windows \ lắp ráp> cd GAC_64

C: \ Windows \ assembly \ GAC_64> dir

 Thư mục của C: \ Windows \ assembly \ GAC_64

17/12/2009 04:22 PM <TRỰC TIẾP>.
17/12/2009 04:22 PM <TRỰC TIẾP> ..
19/1/2008 09:54 AM <TRỰC TIẾP> blbproxy
 ... bắn tỉa ...
19/1/2008 09:54 AM <TRỰC TIẾP> srmlib
19/1/2008 06:11 AM <TRỰC TIẾP> System.Data
19/1/2008 06:11 AM <TRỰC TIẾP> System.Data.OracleClient
 ... bắn tỉa ...
               0 Tệp 0 byte
              34 Dir (s) 90,538,311,680 byte miễn phí

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

C: \ Windows \ assembly \ GAC_64 \ System.Data> dir
 Thư mục của C: \ Windows \ assembly \ GAC_64 \ System.Data

19/1/2008 06:11 AM <TRỰC TIẾP>.
19/1/2008 06:11 AM <TRỰC TIẾP> ..
04/11/2009 12:20 PM <TRỰC TIẾP> 2.0.0.0__b77a5c561934e089
               0 Tệp 0 byte
               3 Dir (s) 90,538,311,680 byte miễn phí

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

 Thư mục của C: \ Windows \ assembly \ GAC_64 \ System.Data \ 2.0.0.0__b77a5c561934e089

04/11/2009 12:20 PM <TRỰC TIẾP>.
04/11/2009 12:20 PM <TRỰC TIẾP> ..
04/11/2009 12:12 PM 3.008.512 System.Data.dll
               1 tệp 3,008,512 byte
               2 Dir (s) 90,538,311,680 byte miễn phí

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

Tại đây bạn có thể xem phiên bản 2.0.0.0__b77a5c561934e089 của System.Data.

Một DLL được xác định bởi 5 phần:

  1. Tên
  2. Phiên bản
  3. Ngành kiến ​​trúc
  4. Văn hóa
  5. Khóa công khai

Mặc dù 3 người đầu tiên nói chung là những người lớn.


12
Bạn nhận được +1 khi đề cập rằng đó là một cách mới để có các tài liệu tham khảo toàn cầu trong khi tránh "địa ngục dll". (Sẽ là một câu trả lời thậm chí tốt hơn nếu bạn đi sâu vào một chút về địa ngục là gì, và GAC xoay quanh nó như thế nào ... bạn đã có những phác thảo cơ bản về nó ... nhưng tôi chỉ cần thắt chặt cấu trúc thư mục được thêm vào và thêm một chút về cách xác định và duy nhất dll) Không có nghĩa là quá tiêu cực ... Tôi đã cho +1!
Beska

Chỉ cần không cung cấp một liên kết:]. Câu hỏi về câu trả lời của bạn, là "3. Architecture" được chỉ định bởi tên thư mục "GAC_64"? Và Văn hóa trong trường hợp này có trống không - giá trị sẽ nằm giữa dấu "__"?
Daniel Bullis

2
GAC chỉ tồn tại cho các ứng dụng .NET?
Zach Smith

93

GAC = Cache hội toàn cầu

Hãy phá vỡ nó:

  • toàn cầu - áp dụng cho toàn bộ máy
  • lắp ráp - cái mà .NET gọi là thư viện mã của nó (DLL)
  • bộ nhớ cache - nơi lưu trữ mọi thứ để truy cập nhanh hơn / phổ biến

Vì vậy, GAC phải là nơi lưu trữ các thư viện mã để chúng có thể truy cập được đối với tất cả các ứng dụng đang chạy trên máy.


64

Cache hội toàn cầu

Mỗi máy tính nơi cài đặt thời gian chạy ngôn ngữ chung có bộ đệm mã toàn máy được gọi là bộ đệm lắp ráp toàn cầu. Bộ nhớ cache lắp ráp toàn cầu lưu trữ các tập hợp được chỉ định cụ thể để được chia sẻ bởi một số ứng dụng trên máy tính.

Bạn nên chia sẻ các hội đồng bằng cách cài đặt chúng vào bộ đệm lắp ráp toàn cầu chỉ khi bạn cần. Như một hướng dẫn chung, giữ cho các phụ thuộc lắp ráp ở chế độ riêng tư và định vị các cụm trong thư mục ứng dụng trừ khi việc chia sẻ một lắp ráp được yêu cầu rõ ràng. Ngoài ra, không cần thiết phải cài đặt các cụm vào bộ đệm lắp ráp toàn cầu để làm cho chúng có thể truy cập được vào mã COM xen kẽ hoặc không được quản lý.

Những thứ MSDN chứa có thể làm bạn ngạc nhiên ... bạn thường có thể đọc nó như một bài viết. Các bit đơn giản và quan trọng nhất ở trên cùng, các chi tiết phức tạp sâu hơn. Nó chắc chắn giải thích nó tốt hơn tôi có thể.

Lưu ý rằng Visual Studio hiển thị tất cả các DLL trong GAC trong tab .NET của cửa sổ Tham chiếu . (Nhấp chuột phải vào một dự án trong Solution Explorer và chọn Thêm tham chiếu.) Điều này sẽ cung cấp cho bạn một ý tưởng hữu hình hơn.


Ông nói không có liên kết, muốn một lời giải thích bằng lời nói của bạn.
user142350

Trong phiên bản gốc của bài đăng của anh ấy (tôi tin rằng anh ấy đã chỉnh sửa nó một cách nhanh chóng), điều đó không được chỉ định!
Noldorin

15
Ngoài ra, các từ của MSDN luôn luôn tốt hơn và chính xác hơn. :)
Noldorin


12

Global hội Cache (GAC) là một thư mục trong thư mục Windows để lưu trữ các cụm .NET được chỉ định cụ thể để được chia sẻ bởi tất cả các ứng dụng được thực thi trên một hệ thống. Các hội đồng có thể được chia sẻ giữa nhiều ứng dụng trên máy bằng cách đăng ký chúng trong bộ đệm hội đồng toàn cầu (GAC). GAC là một bộ máy rộng bộ đệm cục bộ của các cụm được duy trì bởi .NET Framework.


11

Ứng dụng exe, trước hết, tham chiếu từ thư mục hiện tại đến thư mục con. Và sau đó, thư mục hệ thống. Thư mục hệ thống VS6.0 là ..windows / system32. Thư mục hệ thống .NET giống như đường dẫn GAC bên dưới.

  1. Đường dẫn GAC

    1) C: \ Windows \ hội (cho .NET 2.0 ~ 3.5)

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

  2. Cách cài đặt một hội đồng vào GAC (với tư cách Quản trị viên)

    1) Kéo và thả

    2) Sử dụng GacUtil.exe với Dấu nhắc lệnh của Visual Studio

     gacutil -i [Path][Assembly Name].dll
    • Lưu ý: Để cài đặt một cụm vào GAC, lắp ráp phải được đặt tên mạnh. Nếu không, bạn sẽ gặp một lỗi như thế này: Thất bại trong việc thêm lắp ráp vào bộ đệm: Cố gắng cài đặt một cụm mà không có tên mạnh.
  3. Cách gỡ cài đặt một hội đồng từ GAC (với tư cách Quản trị viên)

     gacutil -u [Assembly Name], Version=1.0.0.0, PublickeyToken=7896a3567gh
    • Lưu ý: không có gia hạn, dll. Phiên bản và PublickeyToken có thể được bỏ qua và được kiểm tra trong hội đồng GAC.

5

Nó giống như đăng ký COM được thực hiện đúng, liên quan đến các tệp vật lý cũng như thông tin vị trí và giao diện của chúng. Trong COM, các tệp có ở khắp mọi nơi, với siêu dữ liệu tập trung. GAC tập trung vào vụ nổ súng.


5

GAC (Global hội Cache) là nơi chứa tất cả các cụm .NET được chia sẻ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.