9

Ho scritto una DLL in VS 2005 che verrà caricata da un altro programma sviluppato in VS 2003. Quando il programma tenta di caricare la mia DLL, genera uno System.BadImageFormatException: The format of the file 'Foo.dll' is invalid.System.BadImageFormatException: Come risolvere la mancata corrispondenza della versione .NET?

Ho cercato SO e Google, e sembra che la versione diversa di .NET sia il colpevole. La mia domanda è: come posso risolvere questo?

(non riesco a modificare il programma sviluppato in VS 2003)

+0

Questo collegamento è stato utile anche: http://devlicio.us/blogs/ziemowit_skowronski/archive/2008/08/22/working-with-net-1-1-in-visual-studio-2008-and-team -server.aspx – joshdick

+0

Una libreria nativa (non gestita) con una dimensione parola diversa può anche generare questa eccezione. Dovrai ottenere una versione per la dimensione della parola corretta o costruire l'applicazione di hosting in modo che corrisponda. – Pekka

risposta

7

Compilare il progetto VS2005 con la stessa versione .Net utilizzata dal progetto VS2003. Oppure, a seconda delle dimensioni del progetto VS2003, riflettore e riscriverlo. Questa è una pratica comune per i progetti qui, dove per qualche motivo oscuro non c'è più la versione VSS disponibile.

+0

"Compilare il progetto VS2005 con la stessa versione .Net utilizzata dal progetto VS2003." Puoi spiegare come farlo? Non vedo come scegliere la versione .NET del mio progetto. – joshdick

+0

Fai clic con il pulsante destro del mouse su Progetto in VS, nella prima scheda puoi selezionare il materiale di destinazione. –

+0

Grazie, Markus. Anche se questo non ha funzionato in VS 2005, ha funzionato nella versione 2008. Apprezzo il vostro aiuto. – joshdick

17

ho ottenuto questo errore quando ho girato la versione a 64 bit del CLR e cercando di caricare un assembly che è stato segnato solo 32 bit. L'assembly specifico nel mio caso era Oracle.DataAccess.dll che viene fornito come parte di ODP.NET.

+0

Anche io sto ottenendo lo stesso errore (con un assembly diverso), hai qualche soluzione per questo? – Marek

+1

Devi solo assicurarti di eseguire il CLR a 32 bit quando carichi solo assiemi a 32 bit –

+1

Questa era la risposta al mio problema. Non l'ho affrontato da un po 'di tempo, ma quando si utilizza l'interoperabilità COM è abbastanza comune imbattersi in questo scenario quando si utilizza la configurazione di build' Any CPU 'e quindi la distribuzione su un server a 64 bit. Le configurazioni x86 sono utili in questi casi. –

14

SOLUZIONE: Se si utilizza IIS7, clic destro/Impostazioni avanzate sul pool di applicazioni specifiche del sito Web e selezionare True on Enable 32-Bit Applications. Dovrebbe funzionare.

Problemi correlati