使用原生映像优化 .NET 桌面应用程序

可以通过预编译二进制文件来改善 .NET Framework 应用程序的启动时间。 可以在打包并通过 Microsoft 应用商店分发的大型应用程序中使用此技术。 我们已观察到,在某些情况下,这样可以将性能提升 20%。 可以在 技术概述中了解有关此技术的详细信息。

我们已将本机映像编译器作为 NuGet 包发布。 可以将此包应用于面向 .NET Framework 4.6.2 或更高版本的任何 .NET Framework 应用程序。 此包会将一个包含本机有效负载的生成后步骤添加到应用程序使用的所有二进制文件。 当应用程序在 .NET 4.7.2 及更高版本中运行时,将加载此优化的有效负载,而以前的版本仍会加载 MSIL 代码。

.NET Framework 4.7.2 包含在 Windows 10 2018 年 4 月更新中。 还可以在运行 Windows 7+ 和 Windows Server 2008 R2+ 的电脑上安装此版本的 .NET Framework。

重要

若要为 Windows 应用程序打包项目打包的应用程序生成本机映像,请确保将项目的“目标平台最低版本”设置为“Windows 周年更新”。

如何生成本机映像

按照这些说明配置项目。

  1. 将目标框架配置为 4.6.2 或更高版本

  2. 将目标平台配置为 x86 或 x64

  3. 添加 NuGet 包。

  4. 创建发布版本。

将目标框架配置为 4.6.2 或更高版本

若要将项目配置为面向 .NET Framework 4.6.2,需要 .NET Framework 4.6.2 开发工具或更高版本。 这些工具可通过 Visual Studio 安装程序作为 .NET 桌面开发工作负载下的可选组件使用:

安装 .NET 4.6.2 开发工具

或者,可以从 https://www.microsoft.com/net/download/visual-studio-sdks 获取 .NET 开发人员包

将目标平台配置为 x86 或 x64

本机映像编译器优化给定平台的代码。 若要使用它,需要将应用程序配置为面向一个特定的平台,例如 x86 或 x64。

如果解决方案中有多个项目,则只有入口点项目(最有可能生成可执行文件的项目)才能编译为 x86 或 x64。 从主项目引用的其他二进制文件将使用主项目中指定的体系结构进行处理,即使它们编译为 AnyCPU 也是如此。

若要配置项目,请执行以下操作:

  1. 右键单击解决方案,然后选择 Configuration Manager

  2. 在<”下拉菜单中,选择生成可执行文件的项目名称旁边的“>新建”。。

  3. 在“新建项目平台”对话框中,确保“从此处复制设置”下拉列表设置为“任何 CPU”。

配置 x86

如果要生成 x64 二进制文件,请重复此步骤 Release/x64

重要

本机映像编译器不支持 AnyCPU 配置。

添加 NuGet 包

本机映像编译器作为 NuGet 包提供,需要将其添加到生成可执行文件的 Visual Studio 项目。 此项目通常是 Windows 窗体或 WPF 项目。 使用此 PowerShell 命令执行此作。

PM> Install-Package Microsoft.DotNet.Framework.NativeImageCompiler -Version 1.0.0

创建发布版本

NuGet 包将项目配置为运行用于发布版本的附加工具。 此工具将原生代码添加到同一二进制文件中。 若要验证该工具是否已处理二进制文件,可以查看生成输出,以确保它包含如下消息:

Native image obj\x86\Release\\R2R\DesktopApp1.exe generated successfully.

可以在项目文件中通过将属性 NgenR2R 设置为 true 来触发非发布版本的本机映像编译。

常见问题

问: 新二进制文件是否适用于没有 .NET Framework 4.7.2 的计算机?

答: 使用 .NET Framework 4.7.2 运行时,优化的二进制文件将受益于改进。 运行以前 .NET Framework 版本的客户端将从二进制文件加载非优化的 MSIL 代码。

问: 如何提供反馈或报告问题?

答: 使用 Visual Studio 中的反馈工具报告问题。 详细信息

问: 将原生映像添加到现有二进制文件有什么影响?

答: 优化的二进制文件包含托管代码和本机代码,从而使最终生成的文件更大。

问: 是否可以使用此技术释放二进制文件?

答: 此版本包含一个可立即使用的 Go Live 许可证。