2010-02-12 29 views
5

Chúng tôi có các phiên bản khác nhau của các hội đồng không được đặt tên mạnh, và không có chuyển hướng ràng buộc/đường dẫn thăm dò cho chúng trong app.exe.config. Ví dụ: MyDll (1.0.0.0_null_neutral) và MyDll (2.0.0.0_null_neutral). Tương đối so với app.exe, các assembly này được lưu trữ trong LAC \ MyDll_1.0.0.0_null_neutral và LAC \ MyDll_2.0.0.0_null_neutral.Làm thế nào để các.NET Runtime Xác định vị trí không mạnh tên 'Assemblies?

Sự hiểu biết của tôi là do hội đồng MyDll không được đặt tên mạnh, thời gian chạy .NET không phân biệt được giữa các phiên bản MyDll khác nhau. Do đó, nếu MyDll 1.0.0.0 đã được tải vào bộ nhớ và một số mã được xây dựng dựa vào MyDll 2.0.0.0 đã được thực hiện, thời gian chạy .NET sẽ không tải MyDll 2.0.0.0.

Tuy nhiên, khi tôi đính kèm quá trình với VS2008 và xem cửa sổ mô-đun, tôi nhận thấy rằng cả MyDll 1.0.0.0 và MyDll 2.0.0.0 được tải từ thư mục LAC.

Dường như có một khoảng trống trong hiểu biết của tôi ở đâu đó. Ai đó có thể xin vui lòng chỉ nó ra?

EDIT: Cảm ơn bạn đã trả lời cho đến thời điểm này. Vâng, tôi đã bỏ qua một chút. Các thực thi lắng nghe sự kiện AssemblyResolve, và xử lý nó bằng cách tìm trong LAC.

Tôi khá chắc chắn rằng tôi đã thấy một số tài liệu MSDN trước khi các phiên bản nói bị bỏ qua trừ khi một phiên bản được đặt tên mạnh. Tôi sẽ xem tôi có thể đào nó không.

+3

Nó không thể hoạt động theo cách bạn mô tả. Không có cách nào để CLR tìm một DLL trong thư mục con LAC mà không thay đổi đường dẫn thăm dò. –

+0

Mục đích của bạn là có hai phiên bản khác nhau của một hội đồng trông giống như thế nào ở đây? Bạn không thể tải ứng dụng mới nhất để bạn làm việc? –

+0

Có 2 phiên bản khác nhau vì ứng dụng bao gồm các plugin khác nhau được viết bởi các nhóm khác nhau, mỗi phiên bản có thể sử dụng một phiên bản khác của assembly. Thông thường, chúng tôi chỉ sử dụng phiên bản cao nhất thông qua đường dẫn khảo sát/chuyển hướng ràng buộc. Nhưng tôi chỉ muốn biết nếu CLR không/không bỏ qua phiên bản cho hội đồng không được đặt tên mạnh. –

Trả lời

1

http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx

Bước 2 được kiểm tra để xem nếu nó được nạp, và đó là phiên bản đặc biệt, ngay cả với các mặt hàng không được đặt tên mạnh.

Bước 4 đang cố tải lắp ráp thông qua thăm dò và đây không phải là phiên bản cụ thể.

Điều tôi đang nhầm lẫn là nếu bạn không có bất kỳ thông tin nào trong tệp cấu hình của mình, làm cách nào để tìm tệp DLL ở địa điểm đầu tiên? Tôi nghĩ rằng có một khoảng cách trong sự hiểu biết của tôi là tốt :-).

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