Tôi đang làm việc trên ứng dụng giao diện điều khiển .NET 3.5 trong C# sử dụng DLL không quản lý VC++. Nó chạy mà không có một vấn đề khi tôi làm việc trên nó một vài tuần trước, nhưng tôi đang trở lại với nó ngày hôm nay và bây giờ nhận được một BadImageFormatException ("Một nỗ lực đã được thực hiện để tải một chương trình với một định dạng không chính xác. (Ngoại lệ từ HRESULT: Máy trạm phát triển của tôi đang chạy 64bit Windows 7, và tôi thực hiện một số lượng công việc hợp lý với mã không được quản lý, vì vậy tôi đã ngay lập tức kiểm tra xem bộ sưu tập .NET và thư viện VC++ đều có mục tiêu x86 hay không.Nguyên nhân thay thế của BadImageFormatException trong .NET Assembly?
Chỉ để chắc chắn, tôi làm sạch và xây dựng lại VC++ thư viện và lắp ráp NET, vô ích.
Cả hệ thống đang làm bất cứ điều gì đặc biệt khác thường. các VC++ tải thư viện một dat nhị phân một tệp và thực hiện một số xử lý toán học về nội dung của nó. Việc lắp ráp NET có DllImports cho thư viện và một số mã để dây nó lên. Điều này tất cả đã làm việc một vài tuần trước đây.
Vì vậy, bây giờ tôi đang tự hỏi liệu có một số nguyên nhân khác của BadImageFormatException ít phổ biến hơn một xung đột x86/x64 mà tôi có thể đang chạy vào.
Cảm ơn.
EDIT: Tôi nhận được cùng một lỗi bất kể chế độ x86 hoặc x64, nhưng khi được đặt thành 'Bất kỳ CPU', thực thi vượt qua điểm đó, nhưng thực thi hủy bỏ cuộc gọi sau đó tới thư viện VC++ mà không có ngoại lệ. Bất kể điều đó có liên quan đến vấn đề này hay không, liệu có cái gì đó 'Bất kỳ CPU' nào khác với cả x86 và x64 có thể làm sáng tỏ điều này?
Có cơ hội nào cho ứng dụng đang chạy có quyền truy cập vào phiên bản x64 của thư viện VC++ và đang cố gắng tải thay thế đó không? Hoặc, ứng dụng đang chạy của bạn có thể đang nhắm mục tiêu AnyCPU chứ không phải x86? AnyCPU sẽ được tải trong 64 bit nếu bạn sử dụng môi trường 64 bit. – Anzurio
Câu hỏi hay. Trước đây không có vẻ như vậy, tôi đã thử sao chép dự án sang một máy khác chưa bao giờ có bất kỳ bản sao nào của thư viện trên đó, cẩn thận chỉ sao chép phiên bản x86 của hội đồng. Cùng một vấn đề đã xảy ra trên máy khác. Ứng dụng chắc chắn được đặt thành x86. Trong tò mò, tôi đặt nó chạy trong 'CPU bất kỳ'. Khi tôi làm điều đó, nó vượt qua cuộc gọi đầu tiên tới thư viện VC++ (nơi nó chết khi được đặt thành x86 hoặc x64) nhưng việc thực thi chấm dứt trong một cuộc gọi sau đó đến thư viện. –
Chạy Dependency Walker x86 trên .exe của bạn và sau đó trên .dll của bạn. Tôi đã gặp sự cố này sau khi sao chép msvcr120.dll từ system32 trên máy 64 bit. Oy! –