2012-02-23 13 views
25

Qualche idea su cosa potrebbe causare questa eccezione?Impossibile caricare l'eccezione di file o assembly

Ho un proj webservice, quando carico il link ottengo

Impossibile caricare il file o l'assembly 'Interop.DIB' o una delle sue dipendenze. Si è tentato di caricare un programma con un formato errato.
Dettagli eccezione: System.BadImageFormatException: impossibile caricare il file o l'assembly 'Interop.DIB' o una delle sue dipendenze. Si è tentato di caricare un programma con un formato errato.

eccezioni interne:

[BadImageFormatException: Impossibile caricare il file o l'assembly 'Interop.DIB' o una delle sue dipendenze. Si è tentato di caricare un programma con un formato errato.]

[ConfigurationErrorsException: impossibile caricare il file o l'assembly "Interop.DIB" o una delle sue dipendenze. Si è tentato di caricare un programma con un formato errato.]

[HttpException (0x80004005): impossibile caricare il file o l'assembly "Interop.DIB" o una delle sue dipendenze. Si è tentato di caricare un programma con un formato non corretto]

Informazioni sulla versione:
Microsoft .NET Framework versione:. 4.0.30319; Versione ASP.NET: 4.0.30319.272

+0

Non so cosa sia "dib" ma sembra dll esterno mancante o non supportato (compilato per 32 bit ma utilizzato a 64 bit?) – Simon

+0

Perché non hai ancora attivato la registrazione di fusione? Inoltre, cos'è "interop.DIB", dov'è, ed è compilato per la stessa architettura del resto della soluzione? – Will

risposta

75

Ok la risposta è Avvia-> Esegui-> digita inetmgr e sui pool di applicazioni di sinistra, seleziona DefaultAppPool e il nome della directory virtuale dell'app e per entrambi assicurati di abilitare le applicazioni a 32 bit su true, am usando IIS7.0 e Windows 7 64-bit. enter image description here

+0

Wow, grazie a Dio per questa risposta. Desidero che i messaggi di errore facciano riferimento alla politica/proprietà che ha causato specificamente l'errore. Sarebbe stato bello sentire che la mia DLL aveva un formato errato perché IIS era impostato per non consentire le applicazioni a 32 bit e quindi si aspettava solo componenti a 64 bit – Erikest

+1

Sembra che tu abbia fatto il mio giorno, visto che il nuovo pool di applicazioni su macchina x64 non funziona t lavoro con x32 dll di default –

+1

Questo ha funzionato !!! Grazie – Nick

1

Se ho dovuto indovinare, è a) non trovare l'assembly interopeo b) la DLL COM non è registrata nel registro locale. Copiare semplicemente DIB nella cartella/bin non è sufficiente quando si monkeying con COM.

Credo che (B) sia la risposta più probabile a ciò che sta accadendo.

3

La causa più comune nella mia esperienza è che hai apportato una modifica a un assembly di riferimento che richiede la ricostruzione di altri assiemi che utilizzano quell'assieme modificato e non li ha ricostruiti.

Esempio n. 1: si dispone di un file EXE che fa riferimento a una DLL. Si aggiunge qualcosa alla DLL di riferimento che aggiunge un nuovo metodo, un nuovo parametro, qualunque sia. Ciò modifica la "firma" esterna della DLL; cioè, la posizione in memoria di vari punti di ingresso. Non ricostruire l'EXE. Quando l'EXE carica e tenta di fare riferimento alla nuova DLL, il suo vecchio punto di ingresso non è più valido, quindi non può eseguire il codice di cui ha bisogno.

Esempio n. 2: si dispone di un EXE x86 che fa riferimento a una DLL. Questa DLL deve anche essere compilata per x86 (o qualsiasi CPU). Se lo si ricostruisce per x64, l'EXE, in esecuzione in uno spazio a 32 bit, non capirà le istruzioni e registrerà i riferimenti al mondo "esteso" a 64 bit e piangerà lo zio.

25

BadImageFormatException di solito significa conflitto 64 vs 32 bit. Uno degli assiemi è impostato su una piattaforma specifica , ovvero 64 bit o 32 bit mentre l'altro è impostato o predefinito su uno diverso.Controlla se entrambi gli assembly sono per la stessa piattaforma, preferibilmente "Any CPU". In altre parole, potrebbe essere che un assembly a 64 bit stia tentando di caricare 32 bit uno o viceversa.

Questo vale anche se si chiama una COM o una DLL che è compilata per diverse piattaforme, ad esempio si chiama COM/DLL a 32 bit da un assembly su un sistema a 64 bit in cui la piattaforma dell'assembly verrà impostata su x64. In questo caso, regolare la piattaforma dell'assieme in modo che corrisponda.

Per cambiare piattaforma andare su Proprietà progetto -> Build -> Piattaforma.

0

Ciò che ha funzionato per me era aggiungere l'assembly al GAC. Per fare questo mi sono imbattuto gacutil -i PATH_TO_ASSEMBLY da Visual Studio Command Prompt

+0

AGGIORNAMENTO: Ciò che ha funzionato è stato scoprire il dominio dell'applicazione usando ** AppDomain.CurrentDomain.BaseDirectory ** e copiare l'assembly lì – Dublin7

0

sono finalmente riuscito a questa eccezione eliminando la voce nella applicationhost.config per IIS Express (C: \ Users {username} \ Documenti \ IISExpress \ config \ ApplicationHost.config).

Ho anche interrotto l'istanza di IIS Express, pulito e ricostruito in VS. Quindi modificare il file di configurazione, quindi riavviare VS 2013.

0

Un altro problema è quello di modificare le proprietà di creazione del progetto.

Per vb.net avuto modo di Progetto -> Proprietà -> Compila -> Avanzate Compile options Qui cambiare la CPU di destinazione

2

Ho avuto lo stesso problema su Visual Studio 2015 su Windows 10 x64. Stavo già compilando in qualsiasi modalità CPU. Questa era un'applicazione MVC4 predefinita (nessuna aggiunta). Ho trovato una soluzione semplice qui che ha funzionato per me: https://github.com/aspnet/Home/issues/524

In VS 2015: Strumenti> Opzioni> Progetti e soluzioni> Progetti Web> utilizzare la versione a 64 bit di IIS Express per siti web e progetti

4

ho avuto questo problema, quando si cerca di utilizzare DLL a 64 bit nel mio progetto ASP.Net, in Visual Studio 2013.

La soluzione era quella di cliccare sul Strumenti \ Opzioni, e spuntare la casella:

enter image description here

+2

Tale puntatore. Stupefacente. Lo hai fatto manualmente o è da qualche app di screenshot? – trnelson

+2

lol !! L'ho trovato da qualche parte sul web e regolarmente lo uso nei miei articoli StackOverflow per rallegrare alcune immagini altrimenti noiose alla ricerca !! –

+0

questo ha funzionato per me – MIKE

0

Che cosa ha funzionato per me sta facendo un aggiornamento del BIOS sulla mia macchina!

Problemi correlati