ngen用于将.NET代码编译成二进制文件,在运行代码时不需要安装.NET框架吗?

时间:2010-07-03 22:57:40

标签: .net ngen

我在维基百科关于CLR的文章中阅读了以下段落:

  

或者,CIL代码可以   编译为单独的本机代码   通过使用在运行时之前的步骤   原生图像生成器(NGEN)。这个   加快了以后的所有运行速度   软件作为CIL到本机   不再需要编译。

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

3 个答案:

答案 0 :(得分:5)

没有

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

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

答案 1 :(得分:2)

阅读Ngen所在的MSDN page

  

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

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

答案 2 :(得分:2)

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

但是, Mono 有一个静态编译器和链接器可以做到这一点。例如,Mono的iPhone支持如何运作。