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.GAC trong .NET là gì?
Trả lời
Đúng vậy, về cơ bản đó là cách để giữ cho các tệp DLL có thể truy cập được trên toàn cầu mà không phải lo lắng về xung đột. Không có thêm DLL Hell. Mỗi kiến trúc và phiên bản đều có nơi ở riêng.
Nó cũng được nó theo 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ó sẽ liệt kê tất cả các file DLL.
Nhưng nếu bạn cháy lên cmd
, bạn có thể thấy nó thực sự có cấu trúc:
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>
Ở đây bạn có thể thấy 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:
- Tên
- Version
- Kiến trúc
- Văn hóa
- Public Key
Mặc dù 3 đầu tiên nói chung là lớn những người.
Bạn nhận được +1 để đề cập rằng đó là một cách mới để có tham chiếu toàn cục .dll trong khi tránh "dll địa ngục". (Nó sẽ là một câu trả lời tốt hơn nếu bạn đi vào một chút xíu về địa ngục và cách GAC đi xung quanh nó ... bạn đã có phác thảo cơ bản về nó ... nhưng tôi sẽ chỉ thắt chặt các cấu trúc thư mục inset, và thêm một chút về cách dll được xác định và duy nhất) Không có nghĩa là âm thanh quá tiêu cực ... Tôi đã cung cấp cho 1! – Beska
Chỉ cần không cung cấp liên kết:]. Câu hỏi về câu trả lời của bạn là "Kiến trúc" đượ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 gạch dưới "__"? –
GAC chỉ tồn tại cho các ứng dụng .NET không? –
Mỗi máy tính mà phổ biến runtime ngôn ngữ được cài đặt có một máy rộng đang nhớ cache gọi là Global Assembly Cache . Bộ lưu trữ lắp ráp lưu trữ lắp ráp toàn cầu được chỉ định cụ thể để chia sẻ bởi một số ứng dụng trên máy tính .
Bạn nên chia sẻ hội đồng bằng cách cài đặt chúng vào bộ nhớ cache lắp ráp toàn cầu chỉ khi bạn cần. Theo nguyên tắc chung, hãy giữ riêng phụ kiện phụ thuộc và định vị các hội đồng trong ứng dụng thư mục trừ khi chia sẻ một assembly được yêu cầu một cách rõ ràng. Ngoài ra, không cần thiết phải cài đặt hội đồng vào bộ nhớ toàn cầu bộ nhớ cache để làm cho chúng có thể truy cập được vào mã COMtương tác 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, 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 tệp DLL trong GAC trong tab .NET của cửa sổ Tham chiếu. (Nhấn chuột phải vào một dự án trong Solution Explorer và chọn Add Reference.) Điều này sẽ cho bạn một ý tưởng dễ hiểu hơn.
Ông nói không có liên kết, muốn có một lời giải thích bằng lời nói của riêng bạn. – user142350
Anh ấy không có liên kết nào ... –
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 nhanh), điều đó không được chỉ định! – Noldorin
Thư viện DLL tập trung.
GAC = toàn cầu hội cache
Hãy phá vỡ nó xuống:
- toàn cầu - áp dụng cho toàn bộ máy
- lắp ráp - những gì NET gọi của nó mã thư viện (DLL)
- bộ nhớ cache - nơi lưu trữ mọi thứ để truy cập nhanh/phổ biến hơ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.
Giống như đăng ký COM được thực hiện đúng, đối với các tệp vật lý cũng như thông tin về giao diện và vị trí của chúng. Trong COM, các tệp ở khắp mọi nơi, với siêu dữ liệu tập trung. GAC tập trung bắn.
GAC (Global Assembly Cache) là nơi tất cả các phiên bản .NET được chia sẻ đều nằm.
Bộ đệm ẩn toàn cục (GAC) là một thư mục trong thư mục Windows để lưu trữ các hội đồng .NET được chỉ định cụ thể để chia sẻ bởi tất cả các ứng dụng được thực hiện trên 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 toàn cục (GAC). GAC là một máy rộng bộ đệm cục bộ của các assembly được duy trì bởi .NET Framework.
Ứng dụng Exe, trước tiên, tham chiếu từ thư mục hiện tại đến thư mục phụ. 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.
GAC đường
1) C: \ Windows \ hội (đối với .NET 2.0 ~ 3,5)
2) C: \ WINDOWS \ Micorosoft.NET \ lắp ráp (đối với .NET 4.0)
làm thế nào để cài đặt một assembly vào GAC (as Administrator)
1) Kéo và Thả
2) Sử dụng GacUtil.exe với Visual Studio Command Prompt
gacutil -i [Path][Assembly Name].dll
- Lưu ý: Để cài đặt một assembly vào GAC, lắp ráp phải được được đặt tên mạnh. Nếu không, bạn nhận được một lỗi như thế này: Không thêm lắp ráp vào bộ nhớ đệm: Cố gắng lắp đặt một cụm mà không có tên mạnh.
Làm thế nào để gỡ bỏ cài đặt một lắp ráp từ GAC (as Administrator)
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.
- 1. AutoClass trong .net là gì?
- 2. WCF trong .NET là gì?
- 3. Cài đặt một assembly vào GAC cho cả mono/.NET
- 4. Để GAC, hoặc không để GAC?
- 5. Loại an toàn trong .net là gì?
- 6. Nhà máy kênh trong .NET là gì?
- 7. Sử dụng Reflection trong .NET là gì?
- 8. Chuỗi thực sự là gì trong .NET?
- 9. Siêu dữ liệu trong .NET là gì?
- 10. "STRONG NAME" trong .NET là gì?
- 11. Thuộc tính 'CLSCompliant' trong .NET là gì?
- 12. Hội đồng .NET là gì?
- 13. GAC - Assembly nằm trong GAC nhưng “Không thể tải tập tin hoặc assembly”
- 14. Làm cách nào để đăng ký tệp DLL .NET trong GAC?
- 15. Miền ứng dụng .NET là gì?
- 16. Phiên bản GAC và Assembly
- 17. liệt kê các hội đồng trong GAC
- 18. .NET Equivalent của InterruptedException (Java) là gì?
- 19. Net Framework 4 mở rộng là gì?
- 20. Văn hóa lắp ráp .NET là gì?
- 21. Tương đương .NET của JMX là gì?
- 22. Xem lại Cài đặt GAC
- 23. Toàn cầu :: có nghĩa là gì trong tệp .Net designer?
- 24. Việc sử dụng Invoke() trong .net là gì?
- 25. [....] trong các nguồn .Net có nghĩa là gì?
- 26. Triển khai tốt nhất cho AOP trong .Net là gì?
- 27. Tương đương với System.nanoTime() trong .NET là gì?
- 28. tương đương .NET của @Deprecated trong java là gì?
- 29. Việc sử dụng giao diện IClonable trong .NET là gì?
- 30. Tương đương với JPA trong .NET là gì?
Bạn có thể giải thích tại sao câu trả lời được liên kết như MSDN hoặc Wikipedia không phù hợp với những gì bạn muốn? –
Bạn có phản ứng với một thông báo lỗi trong một số ứng dụng của người dùng không? – Jeff
@JB King: Tôi thích nghe nó theo những thuật ngữ đơn giản từ một người có kinh nghiệm với .NET chứ không phải là một đặc tả kỹ thuật hoặc một bài viết bí truyền. – Nosrama