c# 64bit nunit badimageformatexception

c# - System.BadImageFormatException causada por el proyecto NUnit



64bit (10)

Buen día a todos. He estado teniendo el mismo problema todo el día en el trabajo y estoy luchando para encontrar nuevos caminos para bajar.

Recibo el siguiente error cuando mi solución se basa en el servidor. No tengo ningún problema en ejecutar / depurar todas las pruebas en la solución y funciona bien. Tanto el servidor como mi PC son x64. He seguido un montón de consejos que he encontrado en vano.

He configurado Platform Target en x86 para todos los proyectos en mi solución en todas las configuraciones.

Soy consciente de que hay un nunit-console-x86.exe que podría marcar la diferencia, pero no estoy seguro de dónde especificarlo en el código.

Tenga en cuenta que me he arrastrado por internet, así que pido disculpas si me he perdido algo.

System.BadImageFormatException: no se pudo cargar el archivo o el ensamblaje
''Spin.TradingServices.DataAcquisition.Test.NUnit, Version = 1.0.12103.2060, Culture = neutral, PublicKeyToken = null'' o una de sus dependencias. Se intentó cargar un programa con un formato incorrecto.
Nombre del archivo: ''Spin.TradingServices.DataAcquisition.Test.NUnit, Version = 1.0.12103.2060, Culture = neutral, PublicKeyToken = null''

Traza de la pila del servidor: en System.Reflection. RuntimeAssembly._nLoad assemblySecurity, StackCrawlMark & ​​stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks) en System.Reflection.Assembly.Load (AssemblyName assemblyRef) en NUnit.CasosGraciasGraciasGeneración de las personasGeneración de las personasGeneración de las personasGeneración de las avesGeneradores de la manoCasosCasos.Gratis. , AutoSuites Booleanos) en NUnit.Core.Builders.TestAssemblyBuilder.Build (String assemblyName, String testName, Boolean autoSuites) en NUnit.Core.TestSuite.Test.P.P. .Core.SimpleTestRunner.Load (paquete TestPackage) en NUnit.Core.Proxy TestRunner.Load (paquete de TestPackage) en NUnit.Core.ProxyTestRunner.Load (paquete de TestPackage) en NUnit.Core.RemoteTestRunner.Load (paquete de TestPack.p.P.P.) Args, Object Server, Int32 methodPtr, Boolean fExecuteInContext, Object [] & outArgs) en System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage (IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)

Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) en System.Runtime.Remoting.ProxPro.PrivateInvoke (Dependencia de animales y otros animales). TestRunner.Load (paquete TestPackage) en NUnit.Util.TestDomain.Load (paquete TestPackage) en NUnit.ConsoleRunner.ConsoleUi.Execute (opciones de ConsoleOptions) en NUnit.ConsoleRunner.Runner.Main (String [] args)

WRN: el registro de enlace de ensamblaje está desactivado. Para habilitar el registro de fallas de enlace de ensamblaje, establezca el valor de registro [HKLM / Software / Microsoft / Fusion! EnableLog] (DWORD) en 1. Nota: Hay alguna penalización de rendimiento asociada con el registro de fallas de ensamblaje. Para desactivar esta función, elimine el valor de registro [HKLM / Software / Microsoft / Fusion! EnableLog].

http://app1017-build.oy.gb.sportingindex.com:8080/job/TradingServices.DataAcquisition-Dev/ws/DataAcquisition/build.proj(86,5) : error MSB6006: "nunit-console.exe" con el código -100. Proyecto de construcción hecho "(objetivos predeterminados) - FALLADO.

Construcción fallida.

TENGA EN CUENTA: hemos revertido nuestra compilación en Hudson y ahora volvemos a enviar archivos de manera más gradual. Voy a informar sobre cómo va esto. Intenté conseguir algunas cabezas involucradas en este caso sin éxito desafortunadamente. ¡Vergüenza!

Actualización No he vuelto a esta página por un tiempo, pero parece que hay muchas soluciones diferentes. Si pudiera marcarlos todos como la respuesta, lo haría! Aquellos de ustedes que encuentren su camino aquí probablemente deberían dar igual crédito a cada opción.


Asegúrese de que esta configuración sea correcta: menú Prueba -> Configuración de prueba -> Arquitectura del procesador predeterminada -> x64 / x86 . Fue incorrecto en mi caso y falló con el mismo problema.


Esto puede sonar estúpido, pero revise las arquitecturas de su proyecto y procesador. En mi caso, estaba ejecutando pruebas de 64 bits en lo que supuse que era una máquina de 64 bits (ya que estaba construyendo proyectos de 64 bits).

¿Adivina qué? En realidad era una máquina de 32 bits. Entonces, NUnit.exe se ejecutó como de 32 bits (obviamente), y no puede entender las pruebas de 64 bits.

¿La solución? Cree una versión x86 y x64 de sus pruebas, y ejecute las versiones x86 en las máquinas x86, y las versiones x64 en las máquinas x64.

Obvio. Pero vale la pena echarle un vistazo.


Gracias Ashes999 por despertarme.

Este problema volvió otra vez. Y retroceder y cargar con no funcionó. Resultó ser un objeto monitor que ya ni siquiera usamos. Comentado y arreglado.

La forma de encontrar esto es haciendo Debug All Unit Tests. Arregla donde quiera que se detenga. Si t no se detiene, errar.


Me encuentro con esto a menudo, cuando pruebo contra la consola o la aplicación WPF. Algunas causas son

  • Primero, asegúrese de que su aplicación no se ejecute en .Net Framework 3 o 4 Perfil del cliente
  • Luego compare la versión .NET de target framework tanto en la aplicación como en los proyectos de prueba. Deberían ser iguales
  • Ver el objetivo de la plataforma en la pestaña de compilación Deberían ser iguales. Por ejemplo, si el proyecto de prueba tiene un destino " Cualquier CPU ", la aplicación debe tener " Cualquier CPU ".

Mi situación era un poco diferente. El error apareció bastante al azar después de ejecutar una prueba de unidad que se había modificado.

Quité la prueba y el error desapareció.

Volví a crear la prueba y el error volvió.

Cambié el nombre de la prueba y el error desapareció.

Cambié el nombre de la prueba y el problema no volvió a ocurrir.

¡Espero que esto ayude!

Ben


Para cualquier persona que aún tenga este problema, es posible que también deba configurar el campo marco en el corredor de prueba para que coincida con el proyecto incluido (el campo a la derecha del que hace referencia AlexM).

En mi caso, estaba escribiendo un conjunto de pruebas para una biblioteca de Windows Phone 8, y NUnit no pudo averiguar correctamente la versión de marco que debería usar.


Tuve este problema con una aplicación de consola en la PC X64, la compilación se estableció como x86 y aún se bloqueó. Entré en Propiedades en la aplicación de la Consola y, bajo la compilación, cambié mi objetivo de plataforma de x86 a cualquier CPU y de repente todas las pruebas funcionaron y se ejecutaron correctamente.

Es de destacar que el campo de la plataforma de Configuration Manager puede "mentirle" a usted y en realidad no tiene que reflejar para qué están configuradas las propiedades del proyecto. Mi administrador de configuración dijo que "Common.dll" se estaba construyendo como "Cualquier CPU", pero las propiedades del proyecto (la configuración que realmente importa) lo estaba construyendo como "x86".


Una adición menor a todas las respuestas. Es posible que deba cambiar la plataforma del corredor NUnit (Resharper para mí) como estaba en mi caso. Ver ejemplo


Verifique que la versión del marco de destino de su ensamblaje sea la misma que admite nUnit test runner. Consulte runFile.exe.config para obtener una lista de los tiempos de ejecución compatibles.

Además, si se ha integrado desde FW 3 a FW 4, tienen un tiempo de ejecución diferente (CLR es diferente).


Para mí, la excepción fue causada por un argumento inválido /process=single de nunit. Si cambio el valor, la excepción desaparece:

/process=separate

o

/process=multiple

p / s: respuesta tardía, pero solo como referencia ..