加快使用 Ngen.exe 安装的程序的启动速度
环境
- Visual Studio
-
- Visual Studio Community 2017
- Visual Studio Community 2019
- WiX Toolset
- 3.11.2
* 它适用于其他版本,但尚未确认
入门
.NET 框架应用程序使用 Ngen.exe 创建和安装本机映像。 您可以加快启动和运行速度。
但是,若要创建本机映像,必须在运行应用程序的环境中使用 Ngen.exe 不能分发预先映像的内容。 因此,您是否希望用户手动运行 Ngen.exe? 必须在安装过程中运行。
本节介绍在安装过程中在 WiX 设置中对目标 exe 或 dll 执行 Ngen.exe 的过程。
请注意,Ngen.exe 仅对 .NET 框架应用程序有效,并且最初是本机程序集。 这对于 .NET 核心应用程序没有意义。
提前准备
- 假定您已经在 WiX 中创建了安装程序。
添加库引用
将"WixNetFx 扩展.dll 添加到引用。 文件夹路径为"C:\程序文件 (x86)\WiX 工具集 v3.11_bin"。
编辑产品.wxs
为运行 Ngen.exe 的文件添加设置。
Wix/@xmlns
添加 NetFx 扩展命名空间。
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
将参数添加到创建本机映像的组件(文件)
将 netfx:本机映像添加到目标文件的子元素。
<Component Win64="yes" Id="OGGVORBISPROJECT.DLL" DiskId="1" Guid="6A1D2FD8-9FA7-40D5-A0EA-356268B3C0B4">
<File Id="OGGVORBISPROJECT.DLL" Name="OggVorbisProject.dll" Source="LittleSaviorTrial\Dll\OggVorbisProject.dll">
<netfx:NativeImage Id="NGEN_OGGVORBISPROJECT.DLL" Platform="64bit" Priority="0"/>
</File>
</Component>
如果 exe 或 dll 由于 Ngen.exe 的性质而引用(依赖)其他 dll,则只需指定引用的 exe 或 dll 即可。 例如,如果 A.exe 引用 B.dll,则仅将本机映像设置为 A .exe将自动包括 B.dll。
但是,如果 A.exe 在执行后使用程序集.load 等动态加载 B.dll,则 B.dll 不是依赖项。 在 A.exe 中使用 Ngen.exe 不会编译 B.dll。 在这种情况下,您将在 B.dll 中设置本机映像。
@Id
本机映像的可分辨名称。 不要与其他 Id 重叠。
@Platform
指定"32 位"、"64 位"或"全部"。 更改要安装的应用程序的 32 位或 64 位设置。 all 会创建两个本机映像,因此请指定根据执行状态(如"任意 CPU")切换的库。
@Priority
安装时何时运行 Ngen.exe。 您可以指定 0 到 3,但有关详细信息,请参阅官方网站。
总结
创建安装程序后,可以验证安装是否成功,是否已创建本机映像并将其注册到程序集文件夹中。