Ottenere BadImageFormatException da StackTrace di altra eccezione
-
25-10-2019 - |
Domanda
Nel mio assistente mi sto un'eccezione che mi cattura e sembra essere ok.
Il problema è che quando sto scrivendo il suo StackTrace Mi sto BadImageFormatException .
ho cercato di eseguire il debug del server. Fermato su un punto di interruzione quando cattura l'eccezione, riesco a vedere tutti i suoi campi, ma nel StackTrace vedo l'BadImageFormatException.
Tutte le idee che cosa causa di questo problema?
I miei dettagli del server -
E 'scritto in C # con .NET FW 4.
Io uso anche FrameWork che è scritto in C ++ gestito.
Compilo il mio server a piattaforma x86. Ed eseguire il server su x64 macchina.
La BadImageFormatException completa -
System.BadImageFormatException: I parametri e la firma del metodo non corrispondono. a System.Reflection.RuntimeParameterInfo.GetParameters (IRuntimeMethodInfo methodHandle, membri MemberInfo, Firma SIG, ParameterInfo & returnParameter, booleano fetchReturnParameter) a System.Reflection.RuntimeMethodInfo.FetchNonReturnParameters () a System.Reflection.RuntimeMethodInfo.GetParameters () a System.Diagnostics.StackTrace.ToString (TraceFormat traceFormat) a System.Environment.GetStackTrace (Exception e, booleano needFileInfo) a System.Exception.GetStackTrace (booleano needFileInfo) a System.Exception.ToString (booleano needFileLineInfo) a System.Exception.ToString () a log4net.ObjectRenderer.DefaultRenderer.RenderObject (RendererMap rendererMap, Object obj, TextWriter scrittore) a log4net.ObjectRenderer.RendererMap.FindAndRender (Object obj, TextWriter scrittore)
Soluzione
Non si utilizza Spring.NET? Recentemente ho avuto lo stesso problema in sede di attuazione IErrorHandler in WCF alle eccezioni di registro e nel mio caso è stato problema in Spring.NET. Ho aggiornato alla versione 1.3.1 Spting.NET e ora funziona benissimo.
dal changelog [SPRNET-1284] - IL generazione di codice può causare System.BadImageFormatException in Windows 2008
Altri suggerimenti
Questo avviene se il processo di esecuzione è in esecuzione come x86 (se impostato a AnyCPU e in esecuzione su una macchina win32bit) ma da qualche parte lungo la strada cerca di caricare un assembly che ha compilato esplicitamente x64 .. o viceversa. x64 (o AnyCPU sulla macchina x64) tenta di caricare un sistema x86 esplicito compilato assemblaggio.
Alcuni obfuscators possono causare questa eccezione quando si iniettano metadati non validi.