.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 编译的应用正在引发运行时异常(通常为 MissingMetadataExceptionMissingRuntimeArtifactException 异常),而应用未使用 .NET Native 进行编译时则不会引发该异常

    解决方法:引发异常的原因是 .NET Native 未提供元数据或通过反射可用的实现代码。 (有关详细信息,请参阅 .NET Native 和 Compilation.) 若要消除此异常,必须向运行时指令 (rd.xml) 文件添加一个条目,以便.NET Native工具链可以在运行时提供元数据或实现代码。 有两个可用的故障排除程序,将生成要添加到运行时指令文件的必需条目:

    有关详细信息,请参阅反射和 .NET Native

另请参阅