Theo MSDN documentation,Assembly.LoadFrom BadImageFormatException - hành vi khác nhau trong .NET 4.0 và 4.5 (có thể không có giấy tờ)
public static Assembly LoadFrom(string assemblyFile)
ném BadImageFormatException
nếu
assemblyFile is not a valid assembly.
-or-
Version 2.0 or later of the common language runtime is currently loaded
and assemblyFile was compiled with a later version.
Trên thực tế, có một trường hợp phụ - tải lắp ráp được xây dựng cho x86 từ lắp ráp chạy trong chế độ x64. Có lẽ nó được bao gồm trong "không phải là một hội đồng hợp lệ" tuyên bố, tôi không biết. Nhưng đây là nguyên nhân hợp lý của ngoại lệ.
Ok, nhưng trong .NET 4.5 thì không! Tôi có một ứng dụng .NET 4.5 WPF, tải các ứng dụng khác nhau vì một số lý do. Nó được xây dựng cho bất kỳ CPU và tôi bắt đầu nó trên x64 Win 7. Tôi đã thử nghiệm nó trên một thực thi, được xây dựng cho .NET 4.0 x86, và nó hoạt động tốt. Nhưng khi tôi chuyển ứng dụng của tôi sang .NET 4.0, nó bắt đầu sụp đổ theo phương pháp Assembly.Load
!
Vì vậy, câu hỏi của tôi là, tôi có thiếu gì đó không? Nếu không, sau đó làm thế nào họ làm điều đó - tải x86 lắp ráp từ quá trình x64 trong .NET 4.5? Tôi đang thiếu một số hiểu biết vào thời điểm này.
Cập nhật
Nhờ Hans passant, tôi đã tìm ra sai lầm của tôi. Thực tế, hành vi của Assembly.Load
là không khác nhau. Nó bật ra, tôi đã không thông báo Prefer 32-bit
tùy chọn trong cài đặt dự án (hoặc Prefer32Bit thẻ trong tập tin .csproj). Đó là lý do tại sao quy trình của tôi trong .NET 4.5 ran in a 32-bit mode. Cài đặt này là đúng khi tôi tạo dự án .NET 4.5 WPF. Sau đó, khi tôi chuyển sang .NET 4.0, nó trở nên không hoạt động vì không có tùy chọn như vậy trong .NET 4.0. Và khi tôi chuyển trở lại .NET 4.5, nó trở thành false, vì vậy, tôi đoán, cho mục đích tương thích.
"khi tôi chuyển ứng dụng sang .NET 4.0", ý bạn là .NET 4.5? ;) – HericDenis
Không, ban đầu nó được xây dựng cho 4.5, nhưng sau đó chúng tôi nhận ra rằng chúng tôi cần nó để làm việc trên 4.0 – EvAlex
Nếu đây là một vấn đề thời gian chạy, nó không liên quan cụ thể đến các trình biên dịch được xuất xưởng của các phiên bản đó. Không được gắn thẻ. – leppie