Datei oder Assembly 'xxx' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Es wurde versucht, ein Programm mit einem falschen Format zu laden

188

Ich habe gerade eine Revision von Subversion in einen neuen Ordner ausgecheckt. Öffnete die Lösung und ich bekomme diese beim Ausführen:

Datei oder Assembly 'xxxx' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Es wurde versucht, ein Programm mit einem falschen Format zu laden.

Dies ist derselbe Code, den ich vor einiger Zeit eingecheckt hatte. Warum macht es das jetzt? Ich sehe jetzt auch ein Debug x86 anstatt nur Debug im bin-Ordner des xxx-Projekts. Was ist Debug x86 und warum habe ich Debug nicht einfach so, wie ich es früher im bin-Ordner getan habe?

PositiveGuy
quelle

Antworten:

246

Klingt so, als würde ein Teil des Projekts nur für x86 erstellt, während der Rest für jede CPU / x64 erstellt wird. Das hat mich auch gebissen. Laufen Sie mit einem x64 (oder ähm ... IA64)?

Überprüfen Sie die Projekteigenschaften und stellen Sie sicher, dass alles für "Beliebige CPU" erstellt wird. Wenn Sie sich in Visual Studio befinden, können Sie nach allem suchen, indem Sie im Menü "x86" oder "Beliebige CPU" (neben dem Menü "Debug" / "Release") in der Symbolleiste oben auf dem Bildschirm auf klicken "Konfigurationsmanager..."

Robert Fraser
quelle
1
Es ist auch unter Projekt-> Eigenschaften-> Erstellen oder Debug-> Eigenschaften-> Erstellen. Gerade aktualisiert VS2015, Version 14.0.25123.00 Update 2. Dieses Update wurde gerade am 10.05.16 (gestern!) Veröffentlicht. Ich fand das Plattformziel auf x64 eingestellt, was den festgestellten Fehler verursachte. Die Einstellung auf "Beliebige CPU" hat das Problem behoben.
Michael D. O'Connor
179

Wenn Sie diesen Fehler erhalten, während Sie die Site in IIS 7+ auf 64-Bit-Servern ausführen, haben Sie möglicherweise Assemblys mit 32 Bit, und in Ihrem Anwendungspool ist die Option "32-Bit-Anwendungen aktivieren" auf "Falsch" gesetzt. Setzen Sie dies auf true und starten Sie die Site neu, damit sie funktioniert.

Nick Whiu
quelle
5
@ Mayhem50 Gleich hier. Dies hängt davon ab, wo der Fehler auftritt. Wenn es über den Visual Studio & Cassini-Webserver geht, hat Fraser Recht. Wenn es in IIS7 + auftritt, ist die Antwort von Nicks wahrscheinlich die wahrscheinlichste Lösung.
Carl Heinrich Hancke
Dies war die perfekte Antwort für mich (eine Site wurde von IIS6 auf x86 auf IIS 7 auf x64
verschoben
Ja, das hat es geschafft. Ich habe eine Site von IIS6 auf x86 auf IIS 7 auf x64 verschoben. Ich danke dir sehr!
Lukas
40

Ich hatte diesen Fehler beim Versuch, das schreckliche Business Objects 4 für .Net SDK zu verwenden.

Sie liefern fünf BusinessObjects * .dll-Dateien aus, aber alle sind 64-Bit.

Um meine Webseite laden zu können, musste ich auf Extras \ Optionen klicken und diese Einstellung in VS2013 ändern:

Geben Sie hier die Bildbeschreibung ein

Mike Gledhill
quelle
Diese Option gibt es für mich nicht. Die einzige Option auf diesem Bildschirm für mich unter Visual Studio 2010 ist "IIS Express für neue dateibasierte Websites und Projekte verwenden"
Drew Chapin
Ich habe diese Option in VS 2017 Professional
SKCS Kamal
33

inetmgr dann kommen Sie zu Anwendungspool-> Erweiterte Einstellung Ihres Pools-> hat die Option "32-Bit-Anwendungen aktivieren" auf true gesetzt; und starten Sie IIS neu. erneut überprüfen.!

Muhammad Mubashir
quelle
Zweitens dies. Ich habe einen neuen App-Pool für meine Site erstellt und vergessen, diese Einstellung umzuschalten.
AlbatrossCafe
1
Das hat es auch für mich behoben. Das einzige andere, was ich ändern musste, war, die Pipeline auf integriert zu ändern, da dies auch zu einem Fehler führte, nachdem das obige Update angewendet wurde.
AxleWack
7

Die BadImageFormatException in einer Anwendung, die unter IIS ausgeführt wird (nicht unter VS, da Visual Studio das Problem mithilfe des Builds für "Beliebige CPU" behebt), kann folgende Ursachen haben:

Die Site ist ein Server mit x64 und die Standardeinstellung des Anwendungspools für 32-Bit-Anwendungen aktivieren war False. und Sie haben 32-Bit-Assemblys

Auf der Ebene von Visual Studio lautet der Fix:

  1. Ändern Sie die Projekteinstellung "Ziel-CPU" in "ANYCPU"
Rami Sarieddine
quelle
7

Stellen Sie sicher, dass Sie Ihre Einstellung für "32-Bit bevorzugen" überprüfen. In meinem Fall wurde diese Einstellung in Visual Studio 2012 standardmäßig aktiviert. Der Versuch, etwas von einer externen DLL zu verwenden, schlug fehl, bis ich "32-Bit bevorzugen" deaktivierte .

Geben Sie hier die Bildbeschreibung ein

Danglund
quelle
4

Es ist definitiv ein Problem, wenn einige Projekte aus Gründen der x86-Kompatibilität anstelle einer CPU erstellt werden. Wenn ich raten müsste, würde ich sagen, dass einige der Referenzen zwischen Ihren Projekten wahrscheinlich auf die DLLs in einigen der Ordner bin \ debug verweisen, anstatt Projektreferenzen zu sein.

Wenn ein Projekt für x86 anstelle von 'Beliebige CPU' kompiliert wird, werden die DLLs in den Ordner bin \ x86 \ debug anstatt in bin \ debug verschoben (wo wahrscheinlich Ihre Referenzen suchen).

In jedem Fall sollten Sie jedoch Projektreferenzen zwischen Ihren Projekten verwenden.

Jaco Pretorius
quelle
0

Wenn im Visual Studio mit IIS Express funktioniert und wenn die Veröffentlichung fehlgeschlagen ist, versuchen Sie Folgendes:Geben Sie hier die Bildbeschreibung ein

asdf_enel_hak
quelle