.NET Native Apps 中的运行时异常

请务必在其目标平台上测试通用 Windows 平台应用的发布版本,因为调试和发布配置完全不同。 默认情况下,调试配置使用 .NET Core 运行时编译应用,但发布配置使用 .NET Native 将应用编译为本机代码。

重要

有关处理在测试应用版本时可能遇到的 MissingMetadataExceptionMissingInteropDataException以及 MissingRuntimeArtifactException 异常的信息,请参阅 "入门" 主题中 "步骤 4:手动解析缺少的元数据",以及 "反射和 .NET Native" 和 "运行时指令 (rd.xml) 配置文件参考"。

调试和发布版本

在调试版本针对 .NET Core 运行时执行时,它尚未被编译为本机代码。 这使得运行时通常提供的所有服务都可供应用使用。

另一方面,发布版本编译为目标平台的本机代码,删除对外部运行时和库的大多数依赖项,并大幅优化代码以实现最佳性能。

调试使用 .NET Native 编译的发布版本时:

  • 你使用的是 .NET Native 调试引擎,和普通的 .NET 调试工具不同。

  • 可执行文件的大小会尽可能减小。 .NET Native 减小可执行文件大小的方法之一是显著剪裁运行时异常消息,本主题在 运行时异常消息 部分中更详细地讨论。

  • 代码经过大量优化。 这意味着会尽可能地使用内联。 (内联将代码从外部例程移动到调用例程中。.NET Native 提供专用运行时并实施激进内联会影响调试时显示的调用堆栈。 有关详细信息,请参阅 运行时调用堆栈 部分。

注释

可以通过选中或取消选中使用 .NET Native 工具链 框来控制调试和发布版本是否使用 .NET Native 工具链编译 。 但是,Microsoft应用商店将始终使用 .NET Native 工具链编译应用的生产版本。

运行时异常消息

为了尽量减少应用程序可执行文件大小,.NET Native 不包括异常消息的全文。 因此,在发布版本中引发的运行时异常可能不会显示异常消息的全文。 相反,文本可能包含子字符串以及要关注的链接以获取详细信息。 例如,异常信息可能显示为:

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.

如果需要完整的异常消息,请运行调试版本。 例如,发布版本中以前的异常信息可能在调试版本中如下所示:

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

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

运行时调用堆栈

由于内联和其他优化,由 .NET Native 工具链编译的应用程序显示的调用堆栈可能无法帮助您清晰地识别运行时异常的路径。

若要获取完整堆栈,请改为运行调试生成。

另请参阅