Запускайте более быстрые программы, устанавливаемые с помощью 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.
Редактирование 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, но для получения дополнительной информации, пожалуйста, обратитесь к официальному сайту.
Сводка
После создания установщика можно увидеть, что в случае успешной установки создается и регистрируется в папке сборки образ машинного образа.