Impossibile caricare il file o l'assembly 'xxx' o una delle sue dipendenze. Tentativo di caricare un programma con un formato errato


188

Ho appena verificato una revisione da Subversion a una nuova cartella. Ho aperto la soluzione e ottengo questo quando eseguito:

Impossibile caricare il file o l'assembly 'xxxx' o una delle sue dipendenze. Tentativo di caricare un programma con un formato errato.

Questo è lo stesso codice che avevo verificato qualche tempo fa. Perché ora lo sta facendo? Ora vedo anche un debug x86 anziché solo Debug nella cartella bin di quel progetto xxx. Che cos'è Debug x86 e perché non ho solo Debug come facevo nella cartella bin?


2
Hai provato a ricostruire tutto? A volte ciò risolve strani problemi di dipendenza per me ...
mezoide,

Risposte:


246

Sembra che una parte del progetto sia stata creata solo per x86 mentre il resto sia stato creato per qualsiasi CPU / x64. Anche questo mi ha morso. Stai eseguendo un x64 (o uh ... IA64)?

Controlla le proprietà del progetto e assicurati che tutto sia in fase di creazione per "Qualsiasi CPU". se sei in Visual Studio, puoi controllare tutto andando nel menu "x86" o "Qualsiasi CPU" (accanto al menu "Debug" / "Rilascio") sulla barra degli strumenti nella parte superiore dello schermo e facendo clic su "Configuration Manager ..."


1
È anche in Progetto-> Proprietà-> Build, o Debug-> Proprietà-> Build. Appena aggiornato VS2015, versione 14.0.25123.00 Aggiornamento 2. Questo aggiornamento è stato appena rilasciato il 5/10/16 (ieri!). Ho trovato il Target piattaforma impostato su x64, che ha causato l'errore rilevato. L'impostazione su "Qualsiasi CPU" l'ha risolto.
Michael D. O'Connor,

179

Se viene visualizzato questo errore durante l'esecuzione del sito in IIS 7+ su server a 64 bit, è possibile che siano presenti assembly a 32 bit e il pool di applicazioni avrà l'opzione "Abilita applicazioni a 32 bit" impostata su False; Impostalo su true e riavvia il sito per farlo funzionare.


5
@ Mayhem50 Lo stesso qui. Dipende da dove si verifica l'errore. Se è tramite il server Web Visual Studio e Cassini, Fraser ha ragione. Se si verifica in IIS7 +, la risposta di Nicks è probabilmente la soluzione più probabile.
Carl Heinrich Hancke,

Questa è stata la risposta perfetta per me (ho spostato un sito da IIS6 su x86 a IIS 7 su x64)
DrStalker

Sì, lo ha fatto. Ho spostato un sito da IIS6 su x86 a IIS 7 su x64. Grazie mille!
Lukas,

40

Ho riscontrato questo errore durante il tentativo di utilizzare il terribile Business Objects 4 per .Net SDK.

Forniscono cinque file BusinessObjects * .dll, ma sono tutti a 64 bit.

Per caricare la mia pagina Web, dovevo fare clic su Strumenti \ Opzioni , quindi modificare questa impostazione in VS2013:

inserisci qui la descrizione dell'immagine


Questa opzione non esiste per me. L'unica opzione su questa schermata per me in Visual Studio 2010 è "Usa IIS Express per nuovi siti Web e progetti basati su file"
Drew Chapin,

Ho questa opzione in VS 2017 Professional
SKCS Kamal

33

inetmgr quindi vieni nel Pool di applicazioni-> Impostazioni avanzate del tuo pool-> avrà l'opzione "Abilita applicazioni a 32 bit" impostata su true; e riavvia IIS. controlla di nuovo.!


Secondo questo. Ho creato un nuovo pool di app per il mio sito e avevo dimenticato di attivare questa impostazione.
AlbatrossCafe

1
Questo ha risolto anche per me. L'unica altra cosa che dovevo cambiare era cambiare la pipeline in integrata, poiché ciò mi dava anche un errore dopo l'applicazione della correzione di cui sopra.
AxleWack,

7

BadImageFormatException su un'applicazione in esecuzione su IIS (non in esecuzione da VS, poiché Visual Studio risolve il problema utilizzando la build per "Qualsiasi CPU") può essere causato da quanto segue:

Il sito è un server x64 e l'impostazione predefinita del pool di applicazioni per Abilita applicazioni a 32 bit era False. e hai assembly a 32 bit

A livello di Visual Studio, la correzione è:

  1. Modificare l'impostazione del progetto "CPU di destinazione" su "ANYCPU"

7

Assicurati di verificare l'impostazione per "Prefer 32 bit". Nel mio caso Visual Studio 2012 aveva questa impostazione selezionata per impostazione predefinita. Tentativo di utilizzare qualsiasi cosa da una DLL esterna non è riuscito finché non ho deselezionato "Prefer 32 bit" .

inserisci qui la descrizione dell'immagine


4

È sicuramente un problema con alcuni dei progetti creati per la compatibilità x86 invece di qualsiasi CPU. Se dovessi indovinare, direi che alcuni dei riferimenti tra i tuoi progetti probabilmente fanno riferimento alle DLL in alcune delle cartelle bin \ debug anziché essere riferimenti al progetto.

Quando un progetto viene compilato per x86 invece di 'Any CPU', le DLL entrano nella cartella bin \ x86 \ debug anziché bin \ debug (che è probabilmente dove stanno cercando i tuoi riferimenti).

Ma in ogni caso, dovresti usare riferimenti di progetto tra i tuoi progetti.


0

se mentre In Visual Studio con IIS Express funziona e se pubblicato non è riuscito provare questo:inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.