2012-05-09 14 views
17

Tengo una aplicación mixta .NET y de consola de código nativo. El proceso de la aplicación finaliza debido al error fatal de Visual C RunTime Library. A pesar de que estoy usando el siguiente, el código administrado no captura la excepción nativa:No se puede detectar la excepción nativa en el código administrado

  1. bloque try/catch
  2. AppDomain.UnHandledExption += ...
  3. Marcando el RuntimeCompatibilityAttribute(WrapNonExceptionThrows = true) en el archivo AssmblyInfo.

¿Qué más puedo hacer?

Respuesta

21

Las excepciones nativas han cambiado en .NET 4, por lo que no se pueden atrapar con un bloque catch estándar. Específicamente tiene que marcar la función donde se lanza la excepción como [HandleProcessCorruptedStateExceptions] para poder atraparla.

Más aquí, http://msdn.microsoft.com/en-us/magazine/dd419661.aspx

Cuidado con las notas en ese artículo, al igual que si se desea para su captura normalmente en lugar de seguir sus consejos de ejecutar el bloque finally y salir, añadir legacyCorruptedState­­ExceptionsPolicy=true en su archivo de configuración .

+0

Esto me ha ayudado mucho. Muchas gracias. – Newbee

-2

La captura sin() atrapará excepciones que no cumplen con CLS, incluidas las excepciones nativas.

try 
{ 

} 
catch 
{ 

} 
+0

Lo intenté y no funcionó para mí. – DoronBM

+0

Hice mi comentario basado en esta regla FxCop .. http://msdn.microsoft.com/en-gb/bb264489.aspx Lo siento, no funcionó .. – Oscar

Cuestiones relacionadas