Obtenir BadImageFormatException de la StackTrace d'autre exception
-
25-10-2019 - |
Question
Dans mon serveur je reçois une exception que je surprends et il semble être ok.
Le problème est que quand j'écris son StackTrace Je reçois BadImageFormatException .
J'ai essayé de déboguer le serveur. Arrêté sur un point d'arrêt lors de la capture à l'exception, je peux voir tous ses champs, mais dans le StackTrace je vois le BadImageFormatException.
Toutes les idées Quelles sont les causes de ce problème?
Mes coordonnées du serveur -
Il est écrit en C # .NET avec FW 4.
Je l'utilise aussi FrameWork qui est écrit en C ++ géré.
Je compile mon serveur à la plate-forme x86. Et exécuter le serveur sur la machine x64.
Le plein BadImageFormatException -
System.BadImageFormatException: Les paramètres et la signature de la méthode ne correspond pas. à System.Reflection.RuntimeParameterInfo.GetParameters (IRuntimeMethodInfo methodHandle, membre MemberInfo, Signature sig, ParameterInfo & returnParameter, Boolean fetchReturnParameter) à System.Reflection.RuntimeMethodInfo.FetchNonReturnParameters () à System.Reflection.RuntimeMethodInfo.GetParameters () à System.Diagnostics.StackTrace.ToString (TraceFormat traceFormat) à System.Environment.GetStackTrace (Exception e, Boolean needFileInfo) à System.Exception.GetStackTrace (Boolean needFileInfo) à System.Exception.ToString (Boolean needFileLineInfo) à System.Exception.ToString () à log4net.ObjectRenderer.DefaultRenderer.RenderObject (RendererMap rendererMap, objet obj, écrivain TextWriter) à log4net.ObjectRenderer.RendererMap.FindAndRender (Object obj, écrivain TextWriter)
La solution
Utilisez-vous Spring.NET? Récemment, j'ai eu le même problème lors de la mise en œuvre IErrorHandler dans WCF exceptions journaux et mon problème de cas était Spring.NET. J'ai mis à jour à la version 1.3.1 Spting.NET et maintenant il fonctionne très bien.
de changelog [SPRNET-1284] - la génération de code IL peut entraîner System.BadImageFormatException dans Windows 2008
Autres conseils
Cela se produit si votre processus d'exécution est en cours d'exécution comme x86 (si elle est définie à anycpu et en cours d'exécution sur une machine à win32bit), mais quelque part sur la route, il tente de charger un ensemble qui a compilé comme x64 explicitement .. ou vice versa. X 64 (ou anycpu sur machine x64) tente de charger un x86 explicite compilé assemblage.
Certains obfuscators peuvent provoquer cette exception quand ils injectent des métadonnées non valides.