4

我正在使用 NSIS 部署一个 .Net 应用程序。安装/卸载过程运行良好,但我想添加最后一个 ngen 步骤以提高启动性能。

不幸的是,谷歌没有透露任何相关材料。以前不太可能没有人这样做过 - 也许这里有人有一些想法?

在不太可能的情况下,如果没有丑陋的 hack 就无法支持,我愿意使用不同的安装程序技术,只要它可以在我的 Linux 构建服务器上运行。(例如,这排除了 WiX。)

有任何想法吗?

4

3 回答 3

3

NGen 将位于 .NET 框架目录中,例如:

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

选项 1 - GetCORSystemDirectory() 是一个系统 API 调用,可用于获取 .NET Framework 的目录,但这里的问题是,从阅读文档时听起来好像需要从 .NET 应用程序调用它。因此,您可以运行一个小型 .NET 应用程序并将 GetCORSystemDirectory() 的结果写入一个 ini 文件。也许搜索那个功能,看看你是否通过谷歌找到任何有用的东西。

选项 2 - 您可以假设 .NET 框架位于预期路径中,并遍历目录并找到以“v2.0.”开头的目录。

选项 3 - 只需从您的安装程序中提取 ngen 然后运行它。这就是我偶尔对 regasm 所做的事情。我不确定您可能会遇到什么副作用,这是否完全合法,或者它是否依赖于任何其他文件。如果它类似于 regasm.exe,那么只要已经安装了 .NET 框架就可以了。

于 2010-03-24T20:33:30.257 回答
1

您可以使用内置的 Exec/ExecWait 命令在最后一部分执行 ngen(或者,使用 nsExec 或第 3 方 exec 插件之一)

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

注意:这假设 ngen 位于大多数系统上可能不在的路径或当前目录中,因此请使用 SetOutPath 设置当前目录或使用 ngen 的完整路径

您必须自己确定所需的确切开关,请参阅 MSDN 获取2.01.x ngen 文档

于 2010-03-23T02:05:29.250 回答
0

似乎有一种方法可以通过nsis获取运行时目录:http: //nsis.sourceforge.net/Get_directory_of_installed_.NET_runtime

一旦知道路径,剩下的就是使用正确的参数调用 ngen。伟大的!

于 2010-03-26T18:54:22.833 回答