2009-02-11 36 views
22

Đã có một số câu hỏi được hỏi trong luồng ngăn xếp dòng này, chẳng hạn như What are the advantages and disadvantages of using the GACWhen and when-not to install into the GAC? và một vài người đã hỏi nó trên web expamle. Tôi không thể có bất kỳ lý lẽ thuyết phục nào về việc không sử dụng GAC. Tôi chắc chắn tôi đang ngây thơ nhưng nó seams như có nhiều lợi ích hơn (chẳng hạn như hiệu suất và các vấn đề kiểm soát phiên bản) để sử dụng GAC sau đó không sử dụng nó.Tại sao tôi KHÔNG nên sử dụng GAC?

Tại sao tôi KHÔNG nên sử dụng GAC?

Trả lời

43

Chris Sells cho lẽ the best reason for avoiding the GAC nơi bạn có thể:

Điều này sôi xuống đến là một trong các điểm chia sẻ các bản cập nhật, cho dù đó là một COM CLSID, windows \ system32 hoặc GAC, là nguy hiểm và cần tránh. Và đây là lý do tại sao kịch bản triển khai .NET ưa thích là "triển khai xcopy", tức là có bản sao riêng của từng tệp DLL mà bạn thử nghiệm và triển khai với phần còn lại của ứng dụng của bạn.

"Aha!" bạn nói. "GAC hỗ trợ nhiều phiên bản của một assembly! Khi một foo.dll được cập nhật thành v1.1, v1.0 nằm ngay bên cạnh nó để ứng dụng của bạn không bị ngắt!" Tất nhiên, điều đó hoàn toàn đúng. Nhưng nếu đó là trường hợp, tại sao bạn quan tâm? Tôi có nghĩa là, nếu có một hội đồng mới có sẵn nhưng ứng dụng của bạn không phải là chọn nó lên, những gì khác biệt nào nó làm cho?

"Aha một lần nữa !, bạn nói." Tôi có thể đặt chính sách của nhà xuất bản vào GAC cùng với hội đồng của tôi để các ứng dụng được tự động cập nhật! "Đúng vậy, nhưng bây giờ, giống như bất kỳ máy nào- chiến lược thay thế mã rộng của cũ, bạn đang trên móc cho một trách nhiệm tuyệt vời: đảm bảo rằng gần 0% của các ứng dụng, được biết đến với bạn hay không, không phá vỡ.Đây là một trách nhiệm tuyệt vời và một trong đó có MS hàng trăm năm con người ở mỗi bản phát hành mới của .NET Framework và thậm chí với hàng trăm năm thử nghiệm của con người, chúng tôi vẫn không thể làm đúng. Nếu đây là trách nhiệm kiểm tra bạn sẵn sàng sống Với cá nhân, tôi không có tinh thần đạo đức để gánh vác gánh nặng này.

1

Đôi khi trên các trang web được lưu trữ, bạn không có quyền kiểm soát GAC và một số nhà cung cấp dịch vụ lưu trữ sẽ không cho phép bạn cài đặt bất kỳ hội đồng nào vào GAC. Tôi đã gặp phải điều này trước đây và đó là một nỗi đau lớn.

3

Nếu bạn muốn triển khai ít ứng dụng hơn. Chỉ bằng cách cài đặt trong thư mục ứng dụng của bạn, bạn có thể sao chép triển khai và dọn dẹp rất dễ dàng.

2

Nếu bạn có một ứng dụng nhỏ không phải là tài nguyên chuyên sâu, thì tôi sẽ không muốn cài đặt các tệp vào GAC.

Nó sẽ tạo một phụ thuộc khác mà tôi sẽ cần phải kiểm tra trong quá trình gỡ cài đặt của mình và đã có rất nhiều nỗi buồn được thể hiện trong quá khứ về các chương trình lạm dụng đăng ký.

Nó cũng sẽ dễ dàng hơn một chút để gỡ lỗi/bảo trì ở chỗ bạn có thể dễ dàng xác minh rằng tất cả các thư viện thích hợp nằm trong đường dẫn thực thi của ứng dụng.

6

Chúng tôi có một ứng dụng có hơn 50 assembly .NET được tải tại bất kỳ thời điểm nào và chúng tôi không sử dụng GAC. Tôi nghĩ GAC hữu ích nhất nếu bạn phải có nhiều phiên bản ứng dụng của mình chạy cùng một lúc, mỗi phiên bản cần tải một phiên bản khác của cùng một thư viện được chia sẻ.

Thậm chí sau đó, nếu hai phiên bản ứng dụng nằm trong các thư mục khác nhau thì miễn là bạn giữ các tệp nhị phân riêng biệt, bạn vẫn không cần GAC.

Tôi luôn cảm thấy nó hữu ích hơn cho người tạo SDK/API, nơi nhiều phiên bản SDK của họ có thể được tải bởi nhiều ứng dụng và sống hài hòa. Vì vậy, nếu bạn đang ở trong thuyền này thì GAC có thể có ý nghĩa.

Có một số trường hợp rìa yêu cầu GAC (tôi nghĩ .NET COM + thành phần cần phải có trong GAC trong một số trường hợp), nhưng tôi nghĩ rằng đó là một tỷ lệ phần trăm nhỏ của các trường hợp.

2

Tôi hỏi một cái gì đó tương tự (Do I ever really need to use the Global Assembly Cache (GAC)?)

Câu trả lời tốt nhất là "The GAC chỉ hữu ích nếu bạn đăng ký thư viện mà bạn đang đi để tái sử dụng."

Nói cách khác, don không sử dụng nó nếu bạn không chia sẻ thư viện giữa các ứng dụng khác nhau.

2

Việc sử dụng GAC là gì?

i) Bạn có thể lưu trữ nhiều phiên bản của cùng một cụm trên máy và thực thi chúng cạnh nhau. ii) Lưu trữ cùng một cụm ở nhiều vị trí trên máy sử dụng bộ nhớ không cần thiết bổ sung. Việc giữ chúng ở một địa điểm làm giảm chi phí này. iii) Phục vụ các cụm trên máy trở nên đơn giản hơn vì bạn chỉ phải cập nhật một vị trí (GAC) thay vì tìm kiếm nhiều phiên bản của một assembly được lưu trữ trên máy.

Các vấn đề liên quan