Tôi đã cố gắng giải quyết vấn đề này trong vài tuần qua và chưa tìm được giải pháp tốt; hy vọng tôi có thể nhận được câu trả lời ở đây.Đang tải 2 phiên bản lắp ráp tại thời điểm chạy
Tôi có hai hội đồng (ZA & ZB), cả hai đều trỏ đến một dự án/dll chung (ZC) nhưng có thể trên một phiên bản khác (tức là cùng tên dll, cùng một không gian tên, một số lớp có thể khác nhau) . Mỗi bản lắp ráp hoạt động bằng chính nó, tuy nhiên, nếu một bản được tải bởi người khác trong thời gian chạy (ví dụ: A tải B), thì tôi không thể làm cho nó hoạt động được. Cần giúp đỡ.
Dưới đây là các thiết lập:
- ZA phụ thuộc vào ZC (phổ biến) phiên bản 1.1
- ZB phụ thuộc vào phiên bản ZC 1,0
ZA cần tải nhu cầu để tải một cái gì đó trong ZB (mà phụ thuộc vào ZC), khi chạy.
ZA là ứng dụng chính. Dưới thư mục bin
, có một thư mục bổ sung plugins/plugin-ZB
mà theo đó tôi muốn đặt tất cả ZB và các phụ thuộc của nó (ZC).
Đây là những gì tôi đã cố gắng cho đến nay:
Assembly.Load()
sử dụng cùng một phiên bản của dll - làm việc tốt.
Assembly.Load()
sử dụng các phiên bản khác nhau của dll - ZB tải, nhưng khi phương thức chạy, tôi nhận được một phương pháp không được tìm thấy ngoại lệ.
AppDomain.Load()
gặp lỗi không tìm thấy tệp; Tôi thậm chí còn sử dụng các đại biểu để giải quyết hội đồng.
Một số chi tiết liên quan đến ZC: - một số phương pháp là tĩnh công cộng (một số thì không). Ví dụ. Log.Log("hello");
- một số có thể trả về giá trị (nguyên thủy hoặc đối tượng). - một số phương thức không tĩnh (và trả về giá trị).
Trợ giúp? - TIA
"Bạn chỉ có thể có một phiên bản của một lắp ráp cho một AppDomain" là không đúng sự thật. Thậm chí có thể tham khảo hai phiên bản của một hội đồng từ một hội đồng duy nhất, tra cứu bí danh bên ngoài để biết thêm thông tin, đây là điều đầu tiên bật lên trên Google với một ví dụ về tính năng: http://blogs.msdn.com/ b/ansonh/archive/2006/09/28/extern-alias-walkthrough.aspx – Graham
Sử dụng hai AppDomains là một giải pháp cho vấn đề được mô tả. – Graham
Bạn đã đúng, hãy trả lời câu trả lời! –