2010-07-14 23 views
5

Actualicé nuestro software de vs2008/.net 3.5 a vs2010/.net 4.0. Todas las bibliotecas de terceros (las más relevantes: nhibernate 2.1.2 o 3.0.0, nunit 2.5.2) aún se compilan utilizando vs2008. Cuando ejecuto las pruebas unitarias para la compilación de depuración de nuestro software, todo funciona bien. En la compilación de lanzamiento, nunit informa excepciones en 33 de 228 pruebas: System.InvalidProgramException : Common Language Runtime detected an invalid program. Siempre ocurre en las mismas pruebas, tanto para nunit-console como para el rastreador de prueba Resharper 5.0. Cuando los ejecuto usando el comando Resharper "depurar pruebas de unidades", todas las pruebas pasan. No hace ninguna diferencia si ejecuto las pruebas individualmente o por lotes. La excepción siempre ocurre cerca de las llamadas de consulta de nhibernate, pero no puedo asegurarlo ya que el rastreo de la pila de compilación de lanzamiento es algo escaso. No depende del generador de códigos de bytes de nhibernate, la misma excepción aparece para castle y linfu. ¿Alguien tiene una idea de cómo depurar esto?nunidad en la versión de lanzamiento: "Common Language Runtime detectó un programa no válido".

Editar: Quitar Spring.NET no tuvo ningún efecto sobre este problema.

Editar: Cuando cambio la salida de liberación de configuración de depuración para completa en lugar de pdb única y desactivar la casilla de verificación optimizar el código, desaparece la excepción. Ambas configuraciones son necesarias, si cambio solo una de ellas, el error persiste. Sin embargo, un conjunto diferente de pruebas falla si solo cambio uno. Todas las bibliotecas de clase están compiladas para Cualquier CPU.

+0

¿Puedes verificar si las configuraciones de versión y depuración del proyecto son diferentes? He visto algunos casos en los que alguien acaba de agregar X a la configuración de depuración ... dejando la configuración de lanzamiento a punto. – Gishu

+0

@Gishu: Pude rastrear la diferencia a la salida de depuración y optimizar la configuración del código - no parece haber otras configuraciones afecta este problema –

+0

Hmm .. No hay una dirección definida aquí. a partir de algunas búsquedas superficiales, parece estar relacionado con llamadas a dll de terceros. http://bit.ly/g3iwnK Intenta obtener stacktrace y publicar en el foro de MS correcto: parece ser un área de nicho (no es exactamente el punto fuerte de SO) – Gishu

Respuesta

0

Esta es probablemente una pregunta estúpida: ¿está seguro de que todos los ensamblajes están compilados en la misma arquitectura (x86/x64)? Me encontré con esto una vez hace un tiempo.

+0

Debería funcionar cuando todos los ensamblados se compilan para * Cualquier CPU *, o no Tengo que especificar el objetivo explícitamente? –

+0

Cualquier CPU debería funcionar. El compilador JIT compilará cosas para la arquitectura apropiada en la ejecución. – Amy

0

Tuve algo similar cuando seleccioné "NET Framework 4.0 Client Profile". Trate de cambiar el marco de destino a "NET Framework 4.0"

+0

Ya es el perfil completo 4.0, no CP. –

0

Mi aplicación también se ejecutaría en depuración, pero accidente con la misma excepción en la configuración de liberación. La causa fue que tenía un método con el atributo "DEPURACIÓN" condicional, que devolvía un valor ...

Por supuesto, en la configuración de liberación, todos los métodos con el atributo "DEPURAR" condicional se cambian en talones sin retorno valor. Por lo tanto, el IDE podría pensar que sus tipos son buenos para el análisis del código y no ofrecen ninguna advertencia, ¡pero la aplicación compilada tiene coincidencias de tipo de devolución!

Acabo de pensar que agregaría esto para aquellos que golpean sus cabezas contra la pared con este problema.

Cuestiones relacionadas