加快使用 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」。。

image

image

image

編輯產品.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,但有關詳細資訊,請參閱官方網站。

總結

創建安裝程式后,可以驗證安裝是否成功,是否已創建本機映像並將其註冊到程式集資料夾中。

image