Вызовите ngen из установщика NSIS - PullRequest
4 голосов
/ 23 марта 2010

Я использую NSIS для развертывания приложения .Net. Процесс установки / удаления работает нормально, но я хотел бы добавить последний шаг ngen для повышения производительности при запуске.

К сожалению, Google не раскрыл никаких соответствующих материалов. Маловероятно, что никто никогда не делал этого раньше - может, у кого-то здесь есть какая-то идея?

В маловероятном случае, когда это невозможно поддерживать без отвратительных взломов, я хотел бы использовать другую технологию установки при условии , что она может работать на моем сервере сборки Linux. (Это исключает WiX, например.)

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 24 марта 2010

NGen будет находиться в каталоге .NET Framework, например:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

Опция 1 - GetCORSystemDirectory () - это вызов API системы, который можно использовать для получения каталога.NET Framework, но проблема здесь в том, что при чтении документации кажется, что ее нужно вызывать из приложения .NET.Таким образом, вы можете запустить крошечное приложение .NET и записать результат GetCORSystemDirectory () в INI-файл.Может быть, поиск этой функции и посмотреть, если вы найдете что-нибудь полезное через Google.

Вариант 2 - Вы можете ввести .NET Framework в ожидаемый путь и итерировать по каталогам и найти тот, который начинается с "v2.0. ".

Вариант 3. Просто извлеките ngen из вашего isntaller и запустите его.Это то, что я иногда делал с регазмом.Я не уверен, с какими побочными эффектами вы можете столкнуться, является ли это полностью законным, или есть ли другие файлы, от которых это зависит.Если это что-то вроде regasm.exe, у вас все будет хорошо, если .NET Framework уже установлен.

1 голос
/ 23 марта 2010

Вы можете выполнить ngen в вашем последнем разделе, используя встроенные команды Exec / ExecWait (в качестве альтернативы, используйте nsExec или один из сторонних плагинов exec)

ExecWait '"ngen.exe" install "c:\path\to\your\assembly" /silent'

Примечание: это предполагает, что ngen находится в пути или текущем каталоге, которого, вероятно, нет в большинстве систем, поэтому либо установите текущий каталог с помощью SetOutPath, либо используйте полный путь к ngen

Вы должны самостоятельно определить точные переключатели, см. MSDN для 2.0 и 1.x ngen документации

0 голосов
/ 26 марта 2010

Кажется, есть способ получить каталог времени выполнения через nsis: http://nsis.sourceforge.net/Get_directory_of_installed_.NET_runtime

Как только путь известен, остается только вызвать ngen с правильными параметрами. Отлично!

...