9

Tôi đã viết một dll trong VS 2005 sẽ được tải bởi một chương trình khác đã được phát triển trong VS 2003. Khi chương trình đó cố gắng tải dll của tôi, nó ném một System.BadImageFormatException: The format of the file 'Foo.dll' is invalid.System.BadImageFormatException: Cách sửa lỗi Phiên bản .NET không phù hợp?

Tôi đã tìm kiếm SO và Google, và có vẻ như phiên bản .NET khác nhau là thủ phạm. Câu hỏi của tôi là: Làm thế nào để sửa lỗi này?

(Tôi không thể thay đổi chương trình phát triển trong VS 2003.)

+0

Liên kết này cũng hữu ích: http://devlicio.us/blogs/ziemowit_skowronski/archive/2008/08/22/working-with-net-1-1-in-visual-studio-2008-and-team -server.aspx – joshdick

+0

Thư viện gốc (không được quản lý) có kích thước từ khác nhau cũng có thể ném ngoại lệ này. Bạn sẽ cần phải có được một phiên bản cho kích thước từ chính xác hoặc xây dựng các ứng dụng lưu trữ để phù hợp. – Pekka

Trả lời

7

Biên dịch Dự án VS2005 với cùng phiên bản .Net như Dự án VS2003 của bạn sử dụng. Hoặc, tùy thuộc vào kích thước của dự án VS2003 của bạn, phản xạ và viết lại nó. Đó là thực tế phổ biến cho các dự án ở đây, nơi mà vì một số lý do không rõ ràng, không có phiên bản VSS nào có sẵn.

+0

"Biên dịch Dự án VS2005 với cùng phiên bản .Net như Dự án VS2003 của bạn sử dụng." Bạn có thể giải thích làm thế nào để làm điều đó? Tôi không thấy cách chọn phiên bản .NET của dự án. – joshdick

+0

Rightclick Project của bạn trong VS, trên tab đầu tiên bạn có thể chọn targetframework. –

+0

Cảm ơn bạn, Markus. Mặc dù nó không hoạt động trong VS 2005 nhưng nó đã hoạt động trong phiên bản 2008. Tôi đánh giá cao sự giúp đỡ của bạn. – joshdick

17

Tôi đã nhận lỗi này khi tôi đang chạy phiên bản 64bit của CLR và cố gắng để nạp một assembly mà chỉ được đánh dấu 32bit. Các hội đồng cụ thể trong trường hợp của tôi là Oracle.DataAccess.dll mà đến như là một phần của ODP.NET.

+0

Tôi nhận được cùng một lỗi quá (với một hội đồng khác nhau), bạn có bất kỳ giải pháp cho điều đó? – Marek

+1

Bạn cần phải chắc chắn rằng bạn chạy CLR 32bit khi tải 32bit chỉ hội đồng –

+1

Đây là câu trả lời cho vấn đề của tôi. Tôi đã không phải đối mặt với điều này trong một thời gian, nhưng khi một trong những đang sử dụng COM interop nó khá phổ biến để chạy vào kịch bản này khi sử dụng cấu hình xây dựng 'Bất kỳ CPU' và sau đó triển khai đến một máy chủ 64-bit. Các cấu hình x86 có ích trong những trường hợp đó. –

14

GIẢI PHÁP: Nếu bạn đang sử dụng IIS7, Nhấp chuột phải/Cài đặt nâng cao trên Hồ sơ ứng dụng cụ thể của trang web và chọn True on Enable 32-Bit Applications. Nó sẽ hoạt động.

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