2013-02-08 3 views
6

Sto lavorando a un'applicazione Web su un computer Windows 8 a 64 bit utilizzando più librerie esistenti. Voglio utilizzare due DLL C# che fanno riferimento a una DLL nativa. Entrambe le DLL C# sono compilate per l'utilizzo a 64 bit e testate nelle applicazioni di test. La mia applicazione Web fa riferimento a entrambe le DLL C# e deve essere eseguita su IIS 8. Ho aggiunto le due DLL C# come riferimenti al progetto e la DLL nativa manualmente alla cartella bin dell'applicazione Web. Ogni volta che costruisco ed eseguo la soluzione ottengo l'eccezione mostrata nel titolo. So che questo è un segno per un problema riguardante il codice a 32 bit e 64 bit in esecuzione in un unico processo. Pertanto ho provato tutte le diverse configurazioni di build ma il risultato non è mai cambiato.BadImageFormatException: Impossibile caricare il file o l'assembly ... formato non valido - Solo con l'applicazione Web

Ho creato un'applicazione console facendo esattamente quello che sto provando nell'app Web e ha funzionato perfettamente. L'applicazione Web con le stesse identiche impostazioni lancia comunque l'eccezione, questo è ciò che mi confonde davvero.

quello che ho provato finora: impostazione

  • piscina Modifica applicazione per "abilitare le applicazioni a 32-bit"
  • costruire tutti DLL con qualsiasi CPU, 64 bit o x86 bersaglio
  • Controllare le corflags di tutti DLL

Posso fornire un'esportazione del progetto a tutti coloro che desiderano aiutarmi a eseguire questa configurazione!

Apprezzo davvero ogni piccolo aiuto!

+0

Avete ancora qualche soluzione per questo?Perché anche noi abbiamo lo stesso problema e fino ad ora non abbiamo trovato una soluzione funzionante. –

+0

Ciao Saeed, mi dispiace per la mia risposta in ritardo. Poiché il mio progetto era un'app Web, ho deciso di creare una seconda applicazione Web come servizio web che rende disponibile la funzionalità della DLL nativa tramite REST. Non ho trovato alcuna altra soluzione al problema. – JZet

risposta

0

Suppongo di aver provato con l'impostazione Target Platform (opzione Build nelle proprietà del progetto)? Inoltre, dai un'occhiata a questo articolo: http://www.codeproject.com/Articles/383138/BadImageFormatException-x86-i-x64

+1

Ciao Erkan, sì ho provato tutte le diverse possibili impostazioni della piattaforma di destinazione. Purtroppo l'articolo che hai linkato non aiuta molto, in quanto Corflags non funziona con le DLL non gestite: / – JZet

0

Ho ricevuto lo stesso problema sulla mia domanda. È stato risolto dopo aver eseguito quanto segue:

* Concessione dell'autorizzazione per l'utente "Anonimo" nella cartella del mio sito web.
* Modifica del pool di applicazioni da ".NET v4.5 Classic" a ".NET v4.5".

0

Tutto quello che posso offrire è un aiuto nel determinare cosa non viene caricato. Se si tratta di un server di sviluppo, potrebbe essere utile installare il sdk appropriato per utilizzare Fusion Log Viewer. Se questo non è un'opzione che si può attiva la registrazione di montaggio vincolante dal Registro di sistema come segue:

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion] 
"LogFailures"=dword:00000001 
"LogPath"="c:\\bindFailureLogs\\" 

tanto per essere sicuro di spegnerlo quando hai finito, è prevista una penale prestazioni utilizzando la registrazione di legatura . Assicurarsi che la cartella esista prima di immettere la chiave di registro e riciclare il pool di applicazioni dell'applicazione per l'avvio della registrazione. Questo ti fornirà un elenco dettagliato di quale dll (o dipendenza dal momento che non è sempre facilmente evidente se si tratta di una dipendenza o la DLL elencata nel messaggio di errore) non è stata caricata e dove ha provato a caricarla.

Il partizionamento delle applicazioni che risolvono il problema suggerisce che ci sono più dipendenze sull'assembly che hanno come target diverse versioni e dal momento che solo una singola versione di un assembly può essere caricata in un dominio dell'app, alcune dipendenze non vengono soddisfatte. Per gli assembly gestiti è possibile utilizzare uno assembly binding redirect, ma non so quale sarebbe l'equivalente non gestito se esiste.