Запускайте более быстрые программы, устанавливаемые с помощью Ngen.exe

Дата создания страницы :

окружающая среда

Visual Studio
  • Сообщество Visual Studio 2017
  • Сообщество Visual Studio 2019
Набор инструментов WiX
3.11.2

※ Работает в других версиях, но не подтверждено

Сначала

Приложение .NET Framework создает и устанавливает образы в машинной основе с помощью Ngen.exe. Вы можете ускорить запуск и выполнение.

Однако для создания образа в машинном коде необходимо использовать Ngen.exe в среде, в которой выполняется приложение. Нельзя распространять предварительно образное изображение. Поэтому вы хотите, чтобы пользователи запускали Ngen.exe вручную? Он должен быть запущен во время установки.

В этом разделе описываются действия по выполнению Ngen.exe на целевом exe или dll в параметрах wiX во время установки.

Обратите внимание, что Ngen.exe действителен только для приложений .NET Framework и изначально является собственной сборкой. Нет смысла использовать его для приложений .NET Core.

Подготовка заранее

  • Предположим, что вы создали установщик с помощью WiX.

Добавление ссылки на библиотеку

Добавьте WixNetFxExtension.dll в свою ссылку. Путь к папке: C:\Program Files (x86)\WiX Toolset v3.11\bin.

image

image

image

Редактирование Product.wxs

Добавьте параметры в файлы, запускаемые Ngen.exe.

Wix/@xmlns

Добавьте пространство имен NetFxExtension.

<?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:NativeImage к дочерним элементам целевого файла.

<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 ссылаются (зависят) на другие dll из-за природы Ngen.exe, вы можете указать только exe или dll, из которых вы хотите ссылаться на них. Например, если A.exe относится к B.dll, установка для параметра NativeImage значения A.exe автоматически применяется только к B.dll.

Однако если A.exe динамически загружает B.dll с помощью Assembly.Load и т.р. после выполнения, B.dll не является зависимостью. Использование Ngen.exe для A.exe не компилирует B.dll. В этом случае установите для nativeImage значение B.dll.

@Id

Идентификационное имя нативного изображения. Не перекрывайте другие идентификаторы.

@Platform

Укажите "32bit", "64bit" или "all". Измените настройки на 32-разрядной или 64-разрядной окне для устанавливаемого приложения. Все они создают оба собственных образа, поэтому укажите библиотеки, которые переключаются в соответствии с состоянием выполнения, например "Any CPU".

@Priority

Когда запускать Ngen.exe во время установки. Вы можете указать 0-3, но для получения дополнительной информации, пожалуйста, обратитесь к официальному сайту.

Сводка

После создания установщика можно увидеть, что в случае успешной установки создается и регистрируется в папке сборки образ машинного образа.

image