2013-02-08 31 views
6

Tôi đang làm việc trên Ứng dụng web trên máy tính Windows 8 64 bit sử dụng nhiều thư viện hiện có. Tôi muốn sử dụng hai C# DLL tham chiếu một DLL gốc. Cả hai C# DLL được biên dịch để sử dụng 64bit và được thử nghiệm trong các ứng dụng thử nghiệm. Ứng dụng web của tôi tham chiếu cả C# DLL và được cho là chạy trên IIS 8. Tôi đã thêm hai C# DLL làm tham chiếu đến dự án và DLL gốc theo cách thủ công vào thư mục bin của ứng dụng web. Bất cứ khi nào tôi xây dựng và chạy giải pháp, tôi nhận được ngoại lệ được hiển thị trong tiêu đề. Tôi biết rằng đây là dấu hiệu cho một vấn đề liên quan đến mã 32 bit và 64 bit đang chạy trong một quy trình. Vì vậy, tôi đã thử tất cả các cấu hình xây dựng khác nhau nhưng kết quả không bao giờ thay đổi.BadImageFormatException: Không thể tải tệp hoặc lắp ráp ... định dạng sai - Chỉ với Ứng dụng Web

Tôi đã tạo ứng dụng bảng điều khiển làm chính xác những gì tôi đang cố gắng trong ứng dụng web và nó hoạt động hoàn hảo. Ứng dụng web có cùng cài đặt chính xác tuy nhiên ném ngoại lệ, đây là điều thực sự gây nhầm lẫn cho tôi.

gì tôi đã cố gắng cho đến nay:

  • Thay đổi ứng dụng hồ bơi thiết lập để "cho phép các ứng dụng 32-bit"
  • xây dựng tất cả các DLL với Bất kỳ CPU, 64Bit hoặc x86 mục tiêu
  • Kiểm tra CorFlags của tất cả Các tệp DLL

Tôi có thể cung cấp dự án xuất cho tất cả mọi người sẵn sàng giúp tôi chạy cấu hình này!

Tôi thực sự đánh giá cao mọi trợ giúp!

+0

Bạn có giải pháp nào cho điều này không?Bởi vì chúng tôi cũng gặp vấn đề tương tự, và chúng tôi đã không tìm thấy một giải pháp làm việc cho đến bây giờ. –

+0

Hi Saeed, xin lỗi vì câu trả lời trễ của tôi. Vì dự án của tôi là một ứng dụng web, tôi quyết định tạo một ứng dụng web thứ hai dưới dạng một dịch vụ web làm cho chức năng của dll gốc có sẵn thông qua REST. Tôi không tìm thấy giải pháp nào khác cho vấn đề. – JZet

Trả lời

0

Tôi đoán bạn đã thử với thiết lập Nền tảng mục tiêu (Tùy chọn xây dựng trong thuộc tính dự án)? Ngoài ra, hãy xem bài viết này: http://www.codeproject.com/Articles/383138/BadImageFormatException-x86-i-x64

+1

Hi Erkan, vâng tôi đã thử tất cả các cài đặt Target Plattform có thể khác nhau. Bài viết bạn đã liên kết thật đáng buồn không thực sự trợ giúp vì corflags không hoạt động với các dll không được quản lý: / – JZet

0

Tôi gặp vấn đề tương tự trên đơn đăng ký của mình. Nó đã được sửa sau khi tôi thực hiện như sau:

* Cấp quyền cho người dùng "Chưa xác định" trong thư mục trang web của tôi.
* Thay đổi nhóm ứng dụng từ ".NET v4.5 Classic" thành ".NET v4.5".

0

Tất cả những gì tôi có thể cung cấp là một số trợ giúp trong việc xác định nội dung không tải. Nếu đó là một máy chủ dev nó có thể là đáng giá để cài đặt sdk thích hợp để sử dụng Fusion Log Viewer. Nếu đó không phải là một lựa chọn bạn có thể bật khai thác gỗ lắp ráp ràng buộc từ registry như sau:

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion] 
"LogFailures"=dword:00000001 
"LogPath"="c:\\bindFailureLogs\\" 

chỉ cần chắc chắn để tắt nó đi khi bạn đã hoàn tất, có một hình phạt hiệu quả bằng cách sử dụng khai thác gỗ lắp ráp ràng buộc . Đảm bảo thư mục tồn tại trước khi bạn nhập khoá đăng ký và tái chế nhóm ứng dụng của ứng dụng để quá trình ghi nhật ký bắt đầu. Điều này sẽ cung cấp cho bạn một danh sách chi tiết về những gì dll (hoặc phụ thuộc vì nó không phải luôn luôn dễ dàng rõ ràng nếu nó là một dependancy hoặc dll được liệt kê trong thông báo lỗi) không tải và nơi nó đã cố gắng để tải nó từ. Việc phân vùng các ứng dụng sửa lỗi cho thấy có nhiều phụ thuộc vào hội đồng nhắm vào các phiên bản khác nhau và vì chỉ có một phiên bản duy nhất của một assembly có thể được nạp vào miền ứng dụng một số phụ thuộc không được thỏa mãn. Đối với các assembly được quản lý, bạn có thể sử dụng một assembly binding redirect, nhưng tôi không biết tương đương không được quản lý của nó sẽ là gì nếu nó tồn tại.

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