Câu hỏi: Khi nào tôi nên triển khai các hội đồng của mình vào GAC?
Trả lời: Never
thực tế, trung thực, Real trả lời: Hầu như không bao giờ
Thảo luận
Chỉ thả mọi thứ vào GAC khi nhiều ứng dụng trên máy tính này sẽ sử dụng lắp ráp, và khi lắp ráp là cơ sở (có khả năng được sử dụng bởi nhiều ứng dụng), khi nó được ký kết, và khi bạn mong đợi gần như không bao giờ cập nhật hội đồng đó. Có thể thêm vào đó, khi có nhiều phiên bản độc lập của một DLL được triển khai với mỗi ứng dụng thực sự sẽ có hại.
Ví dụ về sau là: giả sử bạn có 2 ứng dụng độc lập, được phát triển độc lập và triển khai độc lập. Tuy nhiên, có một khả năng mà họ sẽ liên lạc với nhau. Họ sẽ trao đổi ... một cái gì đó ... trên .NET Remoting trên máy địa phương. Nếu bạn có một hội đồng duy nhất trong GAC, các ứng dụng này được đảm bảo rằng liên lạc sẽ chỉ hoạt động. Tuy nhiên, nếu họ có một phiên bản riêng biệt của một hội đồng, họ có thể không có khả năng trao đổi đồ vật. Đây là một sự xuất hiện hiếm hoi mà bạn có thể không cần đến nó. Nếu bạn không chắc chắn, thì bạn không cần nó.
Kịch bản GAC cơ sở là Thư viện lớp cơ sở .NET. Các hội đồng này được vận chuyển bởi Microsoft. Chúng có thẩm quyền. Chúng là nền tảng. và đã ký. Họ hiếm khi thay đổi. Tất cả các ứng dụng nên sử dụng cùng một bản sao của các tệp DLL đó. Vì vậy, chúng thuộc về GAC.
Ngược lại, DLL ứng dụng của bạn không phải từ Microsoft, chúng không phải là nền tảng và có thể chưa được ký. Chúng thay đổi thường xuyên hơn và chỉ có một vài ứng dụng (có thể chỉ một ứng dụng!) Sử dụng từng DLL. Không có GAC.
Tôi có thể tưởng tượng thiết bị phần cứng, giả sử một máy ảnh kỹ thuật số, cài đặt phiên bản .NET để cho phép lập trình. Đó là một kịch bản mà hội đồng có thể phù hợp tốt với GAC. Nó cho phép các ứng dụng .NET tùy ý truy cập vào máy ảnh kỹ thuật số theo lập trình.
Ví dụ về log4net của bạn không, theo ý kiến của tôi, đủ để biện minh cho việc lắp ráp GAC. Hãy tưởng tượng kịch bản mà một trong các ứng dụng nhận được bản cập nhật và là một phần của bản cập nhật nó sử dụng phiên bản mới của log4net. Giờ thì sao? Nên lắp ráp log4net mới vào GAC? Chắc là không.
Toàn bộ ý tưởng chia sẻ các tệp DLL trên các ứng dụng được bắt nguồn từ tiền đề rằng bộ nhớ và dung lượng đĩa bị khan hiếm. Ngày xửa ngày xưa, đó là sự thật. Nó không còn là sự thật nữa. Khi nghi ngờ, không sử dụng GAC.
+1 Khi bắt đầu lần đầu tiên.NET chúng tôi nghĩ việc đưa các hội đồng khung của chúng tôi vào GAC là điều đúng đắn cần làm. Chúng tôi đã sai. Nó làm phức tạp mọi thứ cho các nhà phát triển cũng như QA và cài đặt ứng dụng khách. Để có được những lợi ích của các phiên bản song song của cùng một assembly trong GAC, bạn phải định nghĩa rõ ràng các số phiên bản trong các tệp cấu hình, đó là một tệp P.I.T.A thực sự cho tất cả mọi người. Chỉ cần không làm điều đó. – si618
Tôi đồng ý. Chúng tôi bị mắc kẹt với một số thư viện trong GAC của chúng tôi và nó thực sự là một nỗi đau, không chỉ để phát triển mà còn cho việc triển khai vì bạn cần quản trị ngay trên máy chủ sản xuất để cài đặt mọi thứ trong GAC và không phải lúc nào cũng có thể. –
Ôi trời ơi, tôi ghét gấc. 1 cho dòng đầu tiên của câu trả lời này. –