2010-02-23 20 views
8

Tôi có một Assembly Library1.dll trong đó có một số Interfaces, được tuần tự hóa thành một mảng byte vào cơ sở dữ liệu. Đối với một số lý do, chúng tôi phải thay đổi thuộc tính Giao diện và defintion. vì vậy bây giờ tôi đang viết một tiện ích di chuyển. Vì vậy, tôi có 2 phiên bản Library1.dll, Trong tiện ích của tôi, tôi đã tạo một thư mục nơi tôi lưu trữ phiên bản mới của Library1.dll. Tiện ích này lần lượt cũng tham chiếu Library1.dll do đó trong thư mục bin chứa Library1.dll nhưng dll này được biên dịch trên phiên bản cũ hơn. Phiên bản mới của tôi là Library1.dll được lưu trữ trong một đường dẫn riêng mà tôi đang chuyển đến chức năng Assembly.ReflectionOnlyLoadFrom để khởi tạo và do đó GetTypes trên lắp ráp được nạp thêm nữa sẽ cho phép tôi thực hiện chuyển đổi dữ liệu.Assembly.ReflectionOnlyLoadFrom không hoạt động

Nhưng tôi luôn nhận được ReflectionTypeLoadException khi cố gắng tải Library1.dll từ đường dẫn riêng tư.

Xin hãy giúp các bạn !!!. Bất kỳ trợ giúp sẽ được đánh giá cao. Tôi thực sự bị mắc kẹt.

Cảm ơn, AG

+0

Trình tải ngoại lệ trên ReflectionOnlyLoadFromException là gì? http://blogs.msdn.com/suzcook/archive/2003/08/11/57236.aspx –

+0

Điều gì mà bạn đang cố gắng "di chuyển"? Dữ liệu? hoặc dll chính nó? –

+0

Đang cố gắng di chuyển Dữ liệu – netmatrix01

Trả lời

16

Nếu Library bạn đang tham chiếu dll khác, GetTypes sẽ thất bại khi nó chạm một loại sử dụng một loại bên ngoài. Không giống như lắp ráp bình thường tải, ReflectionOnly tải hội sẽ không giải quyết phụ thuộc. Bạn có thể đăng ký AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve và tải phụ thuộc theo yêu cầu hoặc bạn có thể tải trước chúng.

Đây là mã tôi sử dụng cho việc này:

var assembly = Assembly.ReflectionOnlyLoadFrom(assemblyPath); 
foreach (var assemblyName in assembly.GetReferencedAssemblies()) { 
    try { 
    Assembly.ReflectionOnlyLoad(assemblyName.FullName); 
    } catch { 
    Assembly.ReflectionOnlyLoadFrom(Path.Combine(Path.GetDirectoryName(assemblyPath), assemblyName.Name + ".dll")); 
    } 
} 

này sẽ cố gắng để tải tất cả phụ thuộc của sự phản ánh chỉ lắp ráp nạp đầu tiên bởi fullname, sau đó bằng đường dẫn (giả định rằng sự phụ thuộc là trong cùng một thư mục là assembly được tải).

+0

Arne: Bạn đã giúp chúng tôi rất nhiều ở đây. Chúng tôi đập đầu vào tường khá cứng. –

+0

Xem http://blogs.msdn.com/b/junfeng/archive/2004/08/24/219691.aspx cho mã mẫu sử dụng ReflectionOnlyAssemblyResolve. –