Không thể tải tập tin hoặc lắp ráp. Một nỗ lực đã được thực hiện để tải một chương trình có định dạng không chính xác (System.BadImageFormatException)


409

Tôi có hai dự án, ProjectAProjectB. ProjectBlà một ứng dụng giao diện điều khiển, phụ thuộc vào ProjectA. Hôm qua, mọi thứ đều hoạt động tốt, nhưng đột nhiên hôm nay khi tôi chạy ProjectBtôi nhận được điều này:

BadImageFormatException chưa được xử lý :
Không thể tải tệp hoặc tập hợp 'ProjectA, Version = 1.0.0.0, Culture = trung tính, PublicKeyToken = null' hoặc một trong các phụ thuộc của nó. Một nỗ lực đã được thực hiện để tải một chương trình với định dạng không chính xác.

Cả hai chỉ là các dự án thông thường, không phụ thuộc vào bất kỳ dự án phi -.Net nào khác. Cả hai đều hoàn toàn .Net - không có mã gốc và không có P / Gọi. Tôi có các dự án khác phụ thuộc vào ProjectAvà vẫn hoạt động tốt.

Những điều tôi đã thử:

  • Đảm bảo cả hai dự án được đặt thành "Bất kỳ CPU", với hộp kiểm xây dựng được chọn. Họ đang.
  • Đảm bảo cả hai dự án đều cho cùng một Khung mục tiêu (Hồ sơ khách hàng .Net 4.0) .
  • Trong ProjectB -> Tài liệu tham khảo -> ProjectA -> Thuộc tính, đảm bảo "Sao chép cục bộ" được đặt thành "Đúng" _ (Tôi đã xác minh rằng ProjectA.dll đang được sao chép chính xác)
  • Làm sạch / Xây dựng lại giải pháp. Tôi thậm chí đã thử xóa thủ công các thư mục / bin và / obj trong cả hai dự án.
  • Khởi động lại Visual Studio. Khởi động lại máy tính của tôi.
  • Kiểm tra một bản sao hoàn toàn mới của kho lưu trữ.

Nhưng tôi vẫn nhận được lỗi tương tự. Tôi không biết tôi đã làm gì để gây ra điều này, cũng như cách khắc phục nó. Có ý kiến ​​gì không?


1
Nếu bạn có một lịch sử phiên bản trong kho lưu trữ, bạn có thể kiểm tra xem có một số khác biệt trong các tệp csproj không?
Steve

@Steve: Theo Mercurial, không có thay đổi nào ngoài việc thêm tài liệu tham khảo vào các tệp .cs mới
BlueRaja - Danny Pflughoeft

Bạn có nhận được hành vi tương tự trên một máy khác? Có điều gì khác thay đổi trên máy (ví dụ: cập nhật Windows, cập nhật phụ thuộc, v.v.) không?
Mike Parkhill

Bạn đã thử hoàn nguyên các tệp .cs mới chưa?
Mike Parkhill

2
Điều này làm việc cho tôi ............ stackoverflow.com/a/9419522/191403
Som

Câu trả lời:


647

Tôi khá chắc chắn rằng bạn đang có xung đột 32 bit / 64 bit. Có vẻ như dự án chính của bạn có thể được đặt thành 32 bit trong khi lớp tham chiếu của nó được đặt thành 64 bit. Hãy thử nhìn vào câu hỏi SO nàycâu hỏi này quá . Giữa hai người họ, bạn sẽ có thể tìm ra vấn đề của mình.


71
Đừng Tôi bằng cách nào đó hoàn toàn thiếu trình đơn thả xuống "mục tiêu nền tảng" project-->properties-->build- nó được đặt cho x86; thiết lập nó thành "Bất kỳ CPU" đã khắc phục vấn đề này. Tôi luôn nghĩ rằng cài đặt này giống như trình đơn thả xuống "mục tiêu nền tảng" trong trình quản lý cấu hình, nhưng rõ ràng là không (thực tế, "mục tiêu nền tảng" trong trình quản lý cấu hình dường như không làm gì cả!)
BlueRaja - Daniel Pflughoeft

10
Đồng thời xác minh rằng dự án không phải là CPU có Prefer 32 bit được kiểm tra. Dự án -> tài sản -> xây dựng
Reid Evans

26
PS: Một lý do khác là "Kích hoạt ứng dụng 32 bit" là "sai" trong cài đặt nhóm ứng dụng. Bạn cần khởi động lại IIS sau khi đặt thành đúng.
dvdmn

3
Điều tồi tệ nhất xảy ra với tôi với lỗi này là khi VS quyết định nối thêm <PlatformTarget>x86</PlatformTarget>vào một trong những dự án phụ thuộc mà không có lý do nào cả. Nếu tôi không nhìn vào SVN, tôi sẽ không bao giờ hiểu tại sao ứng dụng MVC của chúng tôi không khởi chạy được.
jahu

1
Vui lòng đặt trong IIS DefaultAppPool-> Kích hoạt ứng dụng 32-bit = True
Chaiu

195

Có thể bạn đang phải đối mặt với vấn đề với trang web của mình sau khi triển khai trên máy chủ.

Sau đó, bạn cần điều chỉnh nhóm ứng dụng của mình để Kích hoạt Ứng dụng 32 bit .

Các bước

  1. Mở trình quản lý IIS
  2. Nhấp vào Hồ bơi ứng dụng
  3. Chọn bất kỳ nhóm ứng dụng nào bạn đang sử dụng
  4. Từ khung bên phải, nhấp vào Cài đặt nâng cao ...

  5. Đặt Bật ứng dụng 32 bit thành True

    Cài đặt nâng cao Kích hoạt 32-bit


1
Tôi đã bỏ lỡ một cái gì đó? OP đang nói về một ứng dụng bảng điều khiển không triển khai IIS: "ProjectB là một ứng dụng bảng điều khiển, phụ thuộc vào ProjectA"
MickyD

129

Tôi vừa có thông báo lỗi này khi chạy IIS Express trong Visual Studio 2015. Trong trường hợp của tôi, tôi cần chạy phiên bản 64 bit của IIS Express:

Công cụ → Tùy chọn → Dự án và Giải pháp → Dự án web
Chọn hộp có nội dung "Sử dụng phiên bản 64 bit của IIS Express cho các trang web và dự án".

Ảnh chụp màn hình:

Ảnh chụp màn hình các tùy chọn VS cho Dự án Web.


2
Điều ngược lại áp dụng cho, tôi đã đánh dấu 'Sử dụng 64 bit' và cần bỏ chọn nó ...
cjb110

32

Tôi có vấn đề này như nhau. Tôi đã đặt "Mục tiêu nền tảng" của Dự án A ("Dự án A" (Nhấp chuột phải) -> Thuộc tính-> Xây dựng -> "Mục tiêu nền tảng") thành x86 nhưng giữ cho Dự án B ở mức "Bất kỳ CPU". Đặt Project B's thành "x86" đã sửa lỗi này.


15

Tôi gặp vấn đề này khi chạy thử nghiệm đơn vị (xunit) trong Visual Studio 2015 và đã gặp phải cách khắc phục sau:

Menu Bar -> Test -> Test Settings -> Default Processor Architecture -> X64

7

Bạn có thể cần phải thay đổi Appication Pool thiết lập "Enable 32bit Ứng dụng" thành TRUE trong IIS7 nếu bạn có ít nhất 1 32bit dll \ exe trong dự án của bạn.


OP đang nói về một ứng dụng giao diện điều khiển không phải IIS
MickyD

5

Trước hết tôi đã nhận được điều này trong VS2017 với một dự án cũ mà tôi cần để thực hiện một thay đổi nhỏ và nâng cấp tất cả các dự án lên khung 4.7.


Một số người khác đã đề cập đến việc lựa chọn Any CPU có thể khắc phục vấn đề này.

Có một vài nơi bạn cần làm điều đó, và nó có thể không chỉ đơn giản như chọn từ danh sách thả xuống. CÁi này đã sửa nó giúp tôi:

1) Bạn cần làm cả hai ở đây:

nhập mô tả hình ảnh ở đây

2) Và cũng trong Configuration Manager(nhấp chuột phải vào giải pháp)

nhập mô tả hình ảnh ở đây

Nhưng nếu nó không ở đó thì sao ???

Sau đó nhấp Newvà chọn các cài đặt này: ( cảm ơn @RckLN )

nhập mô tả hình ảnh ở đây


2

Tôi gặp vấn đề tương tự với nhiều dự án trong cùng một giải pháp, cuối cùng tôi đã thiết lập tất cả các khung mục tiêu thành .NET Framework 4 và x86 cho CPU mục tiêu và cuối cùng nó đã được biên dịch thành công.


1
Làm việc trong phiên bản nhưng không thành công trong Debug. Đặt tất cả thành .Net Framework 4 (KHÔNG Cập nhật 1) và Gỡ lỗi chạy ngay bây giờ.
DCastenholz

2

Bạn cũng có thể thấy vấn đề này nếu bạn đang cố gắng gói một dự án 64 bit với trình cài đặt MSI trong VS. ("Lý do là vì shim gốc được đóng gói với tệp .msi là tệp thực thi 32 bit.")

Xem tại đây để biết thêm chi tiết: http://bloss.msdn.com/b/heaths/archive/2006/02/01/64-bit-managed-custom-ilities-with-visual-studio.aspx


1
Xem xét tóm tắt các bài viết được liên kết vì lợi ích của độc giả trong tương lai; trong trường hợp liên kết bị chết
Trái phiếu

2

Không có giải pháp nào trong số này làm việc cho tôi - nhưng bằng cách xóa nội dung của các thư mục bin và obj, mọi thứ lại trở nên mát mẻ.


2

Tôi đã nhận được điều này khi xây dựng một dự án thông qua Visual Studio Online (VSTS) Build bằng cách sử dụng Visual Studio Build bước.

Giải pháp là:

  • Xóa thư mục nguồn hiện có
  • Đặt hoàn toàn 'Bất kỳ CPU' nào trong nền tảng cho tất cả các Bản dựng Visual Studio bao gồm cả phụ thuộc (xem ảnh chụp màn hình bên dưới).
  • Chạy lại bản dựng

Ảnh chụp màn hình VSO


2

Việc sau đây đã giải quyết vấn đề cho tôi, bỏ chọn 'Thích 32-bit': nhập mô tả hình ảnh ở đây


1

Tôi gặp phải vấn đề tương tự. Nó bật ra khỏi màu xanh và điều đó có vẻ lạ đối với tôi.

Trong ảnh chụp nhanh Ngoại lệ, đối với FusionLog, tôi đã thấy những thông tin sau trong thông báo của nó:

... C: \ Windows \ Microsoft.NET \ Framework64 ...

Tìm hiểu thêm về nhật ký hợp nhất: http://msdn.microsoft.com/en-us/l Library / e74a18c4 (v = vs.110) .aspx

Tất cả các dự án đều có CPU mục tiêu của AnyCPU. Tôi đã thay đổi dự án ứng dụng (dự án tham chiếu tất cả các dự án khác) thành CPU mục tiêu x86. Bây giờ nó hoạt động.

Không chắc chắn làm thế nào hỗn hợp CPU mục tiêu xảy ra không có lý do rõ ràng, nhưng nó đã làm.


1

Tôi cũng gặp phải vấn đề này trong một dự án, sau vài phút tôi đã tìm ra giải pháp, vấn đề này là do cấu hình CPU, Nếu bạn đang sử dụng Visual Studio 2010 hoặc VS 2013 , chỉ cần thuộc tính của dự án goto và sau đó chọn Biên dịch từ thanh bên và sẽ có 5 lần thả xuống, thả xuống thứ 5 sẽ là CPU mục tiêu : , bạn nên đặt nó thành x86 hoặc x64 theo yêu cầu của bạn thay vì bất kỳ CPU nào.

Vấn đề của tôi đã được giải quyết sau khi thay đổi nó thành x86.


1

Điều này cũng có thể xảy ra chỉ bằng cách có nhiều khung được hỗ trợ được xác định trong tệp app.config và, buộc ứng dụng phải chạy trong một khung .NET khác với khung được đề cập đầu tiên trong tệp app.config .

Và điều này cũng kích hoạt khi bạn có sẵn cả hai khung được đề cập trong hệ thống của mình.

Như một giải pháp thay thế, hãy đưa ra khung công tác đích mà bạn sẽ sử dụng để gỡ lỗi trong app.config

ví dụ: nếu bạn cố chạy trong .NET 4, tệp cấu hình sẽ có cái gì đó tương tự như thế này,

<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>

1

Trong dự án của tôi cho C #, thuộc tính dự án -> [Build] -> Mục tiêu nền tảng: Bất kỳ CPU nào và bỏ chọn Prefer 32-bit để cho phép trình biên dịch tự động chọn.


1

Phiên bản Chilkat .NET 4.5 yêu cầu thời gian chạy VC ++ 2012 hoặc 2013 được cài đặt trên bất kỳ máy tính nào có ứng dụng của bạn chạy. Hầu hết các máy tính sẽ có nó được cài đặt. Máy tính phát triển của bạn sẽ có nó vì Visual Studio đã được cài đặt. Tuy nhiên, nếu triển khai vào máy tính không có thời gian chạy VC ++ yêu cầu, lỗi trên sẽ xảy ra:

Cài đặt tất cả các gói dưới đây

Visual C ++ Gói phân phối lại cho Visual Studio 2013 - vcredist_x64

Visual C ++ Gói phân phối lại cho Visual Studio 2013 - vcredist_x86

Visual C ++ Gói phân phối lại cho Visual Studio 2012 - vcredist_x64

Visual C ++ Gói phân phối lại cho Visual Studio 2012 - vcredist_x86


1

Nếu bạn sử dụng LibreScript từ chương trình của bạn thông qua tích hợp cli .net như tôi, tôi cũng gặp lỗi tương tự. Tôi sử dụng phiên bản cũ hơn của LibreOffice trên môi trường sản xuất trên PC. Tôi đã cài đặt phiên bản mới hơn bị xung đột. Chỉ cần gỡ cài đặt LibreScript. Tôi đã tìm thấy giải pháp ở đây .NET CLI: Không thể tải tệp hoặc tập hợp 'cli_cppuhelper'


0

Nó có thể hơi buồn cười, nhưng tôi có cùng một vấn đề với mã làm việc bình thường. Tôi đã thêm StreamWriter và StreamReader và nó đã báo lỗi. Giải pháp là tôi lấy mã đó vào dấu ngoặc đơn sau đó gỡ lỗi và nó bắt đầu hoạt động trở lại



0

Trong trường hợp của tôi, một sự phụ thuộc đã bị thiếu trong dll đã ném ngoại lệ này. Tôi đã kiểm tra với Dependency Walker, thêm dll bị thiếu và vấn đề đã được giải quyết.

Cụ thể hơn, bằng cách nào đó, tôi đã làm hỏng opencv_core340.dll bằng cách vô tình thêm từ khóa SVN vào nó, và do đó dll của tôi không còn có thể sử dụng nó. Tuy nhiên tôi không tin rằng giải pháp cho vấn đề này phụ thuộc vào việc dll bị hỏng hay mất tích. Tôi chỉ thêm điều này vì mục đích cung cấp thông tin đầy đủ.


0

Bắn! Tôi biết về vấn đề này. Tôi nghĩ rằng tôi đã làm mọi thứ đúng cho đến khi tôi vô tình nhìn thấy 'x86' trong cửa sổ đầu ra VS và đó là khi tôi nắm được nguyên nhân. Đã lãng phí một vài phút về nó ngày hôm nay.

Cấu hình trong cửa sổ 'Xuất bản' được đặt thành 'x86'; trong khi đó, ở mọi nơi khác, đó là 'x64'.

Vui lòng đảm bảo rằng nó không đồng bộ trên trình quản lý cấu hình, xuất bản cài đặt, cấu hình giải pháp và cài đặt IIS (nếu đó là máy chủ web của bạn).

Ngoài ra, xin lưu ý - VS là ứng dụng 32 bit và IIS là 64 bit. Các ứng dụng 32 bit bị tắt theo mặc định trong IIS.

nhập mô tả hình ảnh ở đây


0

Tôi đã phát hiện ra một cái gì đó khác với các câu trả lời khác. Đạt được ngoại lệ này trong dự án của tôi là kết quả của việc biên dịch bị hỏng. Không thực hiện bất kỳ thay đổi, chỉ buộc buộc xây dựng lại , nó đã được sửa.


0

Tôi gặp vấn đề tương tự. Dự án B trong trường hợp của tôi là Thư viện lớp lõi .Net có cài đặt Nuget "Microsoft.Man Quản lý. Cơ sở hạ tầng". Lỗi là tôi đã gọi dự án của mình là B "MI". Tôi đã thay đổi tên dự án thành một cái gì đó khác và đột nhiên mọi thứ hoạt động trở lại.


-1

Máy của tôi đã cho tôi xem bản cập nhật BIOS và tôi tự hỏi liệu điều đó có liên quan gì đến việc xuất hiện đột ngột lỗi này không. Và sau khi tôi thực hiện cập nhật, lỗi đã được khắc phục và giải pháp được xây dựng tốt.


-1

Bạn đang cố chạy tập tin .exe của mình từ cmd? Đây là sai lầm của tôi. Chỉ cần chạy tệp .exe bằng cách nhấp đúp vào tệp. Nếu đó là .NET Core SCD cho Windows 8.1 / Windows Server 2012 R2 x64.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.