.NET Native 常规故障排除
本文介绍如何排查在使用 .NET Native 开发应用时可能会遇到的潜在问题。
问题
问题:生成输出窗口未正确更新。
解决方法:该生成输出窗口在生成完成之前不会更新。 生成时间可能会长达数分钟,因此在可能看到更新之前可能会有一个延误。
问题: 你的应用的 Arm 零售生成时间已增加。
解决方法: 将应用部署到 Arm 设备时,将调用 .NET Native 基础结构。 该编译执行了大量的优化,同时还确保反射等非静态语义继续工作。 此外,应用使用的 .NET Framework 部分以静态方式链接进来以实现最佳性能,并且还必须编译为本机代码。 这就是编译花费时间较长的原因。
然而,对于标准开发机器上的大多数应用而言,标准编译的编译时间仍在一分钟以内。 通常,仅在标准开发计算机上生成 .NET Framework 的本机映像需要几分钟时间。 即使具有改进生成的代码所需的所有优化,并且具有 .NET Framework,应用生成时间通常也是一两分钟。
我们将继续工作,通过调查多线程编译和其他优化方法来提升编译性能。
问题:你不知道自己的应用是否已使用 .NET Native 进行编译。
解决方法:如果调用 .NET Native 编译器,你会注意到生成时间变长,并且任务管理器会显示不同的 .NET Native 组件进程,如 ILC.exe 和 nutc_driver.exe。
在使用 .NET Native 成功生成项目后,你可在 obj\config\ arch\projectname.ilc\out 下找到该输出。最终原始包内容可在 bin\arch\config\AppX 下找到。 如果你已部署了该应用,最终本机包内容位于 \bin\arch\config\AppX 下。
问题:.NET Native 编译的应用正在引发运行时异常(通常为 MissingMetadataException 或 MissingRuntimeArtifactException 异常),而应用未使用 .NET Native 进行编译时则不会引发该异常。
解决方法:引发异常的原因是 .NET Native 未提供元数据或通过反射可用的实现代码。 (有关详细信息,请参阅 .NET Native 和 Compilation。)若要消除异常,必须向运行时指令(rd.xml)文件添加一个条目,以便 .NET Native 工具链可以在运行时提供元数据或实现代码。 有两个可用的故障排除程序,将生成要添加到运行时指令文件的必需条目:
有关详细信息,请参阅反射和 .NET Native。