加快使用 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,但有關詳細資訊,請參閱官方網站。
總結
創建安裝程式后,可以驗證安裝是否成功,是否已創建本機映像並將其註冊到程式集資料夾中。