Share via


Excepciones de tiempo de ejecución en las aplicaciones nativas de .NET

Es importante probar las versiones de lanzamiento de la aplicación de la Plataforma universal de Windows en las plataformas de destino, ya que las configuraciones de depuración y de lanzamiento son completamente diferentes. De forma predeterminada, la configuración de depuración utiliza el tiempo de ejecución de .NET Core para compilar la aplicación, pero la configuración de lanzamiento usa .NET Native para compilar la aplicación en código nativo.

Importante

Para obtener información sobre cómo tratar las excepciones MissingMetadataException, MissingInteropDataException y MissingRuntimeArtifactException que puede encontrar al probar las versiones de lanzamiento de la aplicación, vea "Paso 4: Resolver manualmente los metadatos que faltan: en el tema Introducción, así como reflexión y .NET Native y y Referencia del archivo de configuración de directivas en tiempo de ejecución (rd.xml).

Compilaciones de depuración y de lanzamiento

Cuando se ejecuta la compilación de depuración en el tiempo de ejecución de .NET Core, no se ha compilado en código nativo. Esto hace que todos los servicios que normalmente ofrece el tiempo de ejecución estén disponibles para su aplicación.

Por otro lado, la compilación de lanzamiento compila a código nativo para las plataformas de destino, quita la mayoría de dependencias de bibliotecas y tiempos de ejecución externos y optimiza enormemente el código para obtener el máximo rendimiento.

Cuando se depuran compilaciones de lanzamiento que se compilaron con .NET Native:

  • Use el motor de depuración de .NET Native, que es diferente de las herramientas de depuración de .NET normal.

  • El tamaño de su archivo ejecutable se reduce tanto como sea posible. Una de las formas en que .NET Native reduce el tamaño de un archivo ejecutable es recortando considerablemente los mensajes de excepción en tiempo de ejecución, un tema que se explica con más detalle en la sección Runtime exception messages .

  • El código está altamente optimizado. Esto significa que la inserción se utiliza siempre que es posible. (La inserción mueve el código de las rutinas externas a la rutina de llamada). El hecho de que .NET Native proporciona un tiempo de ejecución especializado e implementa una inserción agresiva afecta a la pila de llamadas que se muestra al depurar. Para más información, consulte la sección Runtime call stack .

Nota

Puede controlar si las compilaciones de depuración y de lanzamiento se compilan con la cadena de herramientas de .NET Native mediante la activación o desactivación del cuadro Compilar con cadena de herramientas de .NET Native . Sin embargo, Microsoft Store siempre compilará la versión de producción de la aplicación con la cadena de herramientas .NET Native.

Runtime exception messages

Para minimizar el tamaño del archivo ejecutable de la aplicación, .NET Native no incluye el texto completo de los mensajes de excepción. Como resultado, puede que las excepciones de tiempo de ejecución en las compilaciones de lanzamiento no muestren el texto completo de los mensajes de excepción. En su lugar, el texto puede constar de una subcadena junto con un vínculo para obtener más información. Por ejemplo, la información de excepción puede aparecer como:

Exception thrown: '$16_System.AggregateException' in Unknown Module.

Additional information: AggregateException_ctor_DefaultMessage

If there is a handler for this exception, the program may be safely continued.

Si necesita el mensaje de excepción completo, ejecute la compilación de depuración en su lugar. Por ejemplo, la información de excepción anterior de la compilación de versión podría aparecer de la siguiente manera en la compilación de depuración:

Exception thrown: 'System.AggregateException' in NativeApp.exe.

Additional information: Value does not fall within the expected range.

Runtime call stack

Debido a la inserción y otras optimizaciones, es posible que la pila de llamadas mostrada por una aplicación compilada por la cadena de herramientas .NET Native no le ayude a identificar claramente la ruta de acceso a una excepción en tiempo de ejecución.

Para obtener la pila completa, ejecute la compilación de depuración en su lugar.

Vea también