Nếu nó có cùng số phiên bản với DLL được tham chiếu, GAC sẽ được sử dụng.
Nếu bạn tăng số phiên bản, hãy tạo lại trang web tham chiếu số phiên bản mới, đặt phiên bản mới vào thư mục/bin, khi đó DLL đó sẽ được sử dụng.
Nếu bạn không muốn thay đổi số phiên bản, bạn hoàn toàn không may mắn.
Khi .NET tải tập hợp được đặt tên mạnh, trước tiên, nó cố gắng quyết định số phiên bản nào sẽ sử dụng. Nó thực hiện điều này thông qua tham chiếu đầu tiên, sau đó tìm kiếm publisher policies, sau đó tìm kiếm binding redirects trong tệp cấu hình.
Sau khi thực hiện điều này, nó tìm kiếm hội đồng trong GAC, sau đó trong bất kỳ codebase specified, sau đó nó thăm dò các thư mục hệ thống tệp khác nhau cho DLL. Nếu tại bất kỳ một trong những bước đó, nó tìm thấy phiên bản đúng, nó dừng lại.
Nếu bạn không thay đổi số phiên bản của hội đồng được đặt tên mạnh, .NET sẽ tìm thấy phiên bản gốc trong GAC và ngừng tìm kiếm. Lưu ý rằng vì nó dừng lại khi nó tìm thấy một, và bởi vì tìm kiếm trong GAC là đầu tiên, xác định một codebase cho assembly của bạn sẽ làm không tốt trừ khi bạn cũng chỉ định một số phiên bản mới.
Nguồn
2009-06-11 14:16:19
Tôi có hiểu điều này đúng không? Nếu phiên bản 1.0.0.0 nằm trong GAC nhưng tôi biên dịch với phiên bản 1.0.0.1 và đặt 1.0.0.1 trong BIN của tôi, thì GAC bị bỏ qua và BIN được sử dụng.Nếu tôi loại bỏ các .dll từ BIN của tôi sau đó 1.0.0.0 trong GAC sẽ được sử dụng ngay cả khi tôi biên dịch với 1.0.0.1? –
No. Nếu bạn biên dịch dựa vào một hội đồng được đặt tên mạnh, nó sẽ yêu cầu số phiên bản chính xác, trừ khi có chính sách của nhà xuất bản hoặc chuyển hướng ràng buộc có sẵn. –
Chính sách của nhà xuất bản và chuyển hướng ràng buộc cho phép chuyển hướng phiên bản #, vì vậy nếu chương trình của bạn được biên dịch với phiên bản 1.0.0.0 và có chính sách chuyển hướng hoặc nhà xuất bản ràng buộc chỉ định 1.0.0.1 thì phiên bản đó sẽ trở thành phiên bản của nó. –