3

我阅读了有关 CLR 的 Wikipedia 文章中的以下段落:

或者,可以使用本机映像生成器 (NGEN) 在运行前的单独步骤中将 CIL 代码编译为本机代码。由于不再需要 CIL 到本机编译,因此这加快了软件的所有后续运行。

这是否意味着我可以使用任何 .NET 程序并将其编译为二进制文件,然后才能在未安装 .NET 框架的机器上运行?

4

3 回答 3

5

不。

这意味着您在运行代码时不需要运行 JIT(即时)编译器,因为 NGen 已经将其转换为机器代码。生成的二进制文件仍然依赖于 .Net 框架,并且必须在机器上单独安装。

有一些工具可以打包 .Net 框架程序集,并以不需要 .Net 框架的方式将它们包含在您的二进制文件中。查看http://www.xenocode.com/。VMWare 购买了一个名为 Thinstall 的工具,我认为它也可以做到这一点:http: //www.vmware.com/products/thinapp/

于 2010-07-03T23:05:00.310 回答
2

阅读 Ngen 的MSDN 页面,其中指出:

Ngen.exe 创建本机映像,这些文件包含已编译的特定于处理器的机器代码,并将它们安装到本地计算机上的本机映像缓存中。运行时可以使用缓存中的本机映像,而不是使用即时 (JIT) 编译器来编译原始程序集。

意味着(对我来说)Ngen 只是做 JIT 编译器所做的事情并保存结果。它没有说明在二进制文件中包含 .NET 运行时。

于 2010-07-03T23:04:52.807 回答
2

'NGen' 只是编译你的代码。它不会将整个 .NET 框架静态链接到其中。

然而,Mono确实有一个静态编译器和链接器可以做到这一点。这就是 Mono 的 iPhone 支持如何工作的例子。

于 2010-07-03T23:07:08.640 回答