各位朋友:   想必大家都知道.Net SDK自带一个Ngen.exe的工具,即“Native Image Generator”,我在一些资料上看到此工具可以将程序集中的IL代码转换成本地的CPU指令序列。   但是我不清楚它到底是怎么一个转换方式:
   1.将某个.exe程序集转化成完全由本地的CPU指令序列构成的可执行文件,进而可以在不安装.net的情况下直接运行。
   2.只是将程序集中的IL指令代码转换成本地CPU指令序列,而程序集的元数据仍然保持不变。
   3.将程序集中的IL指令代码转换成本地CPU指令序列,然后将此指令序列存储到某一个磁盘文件中。
   ...   我之所以有这么多的联想,是因为我在运用此工具时,没有发现任何变化。具体是这样的:
   D:\c#>ngen ConsoleApplication1.exe
   显示:
   Microsoft (R) CLR Native Image Generator - Version 1.1.4322.573
   Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
   ConsoleApplication1, Version=1.0.2153.32239, Culture=neutral, PublicKeyToken=null <debug>   在这里,ConsoleApplication1.exe是我创建的一个控制台程序。
   运行完命令后,没有任何变化,我仍然可以用ildasm将ConsoleApplication1.exe打开,证明它还是一个程序集,而并没有变成本地代码;而且也没有生成任何新的文件!   我很困惑,不知道怎么回事儿,ngen.exe到底是干什么用的呢?   希望各位高手指点一二,谢谢!

解决方案 »

  1.   

    真的可以吗?如果可以,那么.NET framework就不是必需的了。
    但像gc等,没有运行时的话,怎么执行?
      

  2.   

    详细介绍请看这里:
    http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cptools/html/cpgrfnativeimagegeneratorngenexe.asp
      

  3.   

    是生成本地代码,并放到一个单独的文件中。原来的文件还是需要的,主要是元数据还在原来的文件中。其实也就是省去了即时编译(JIT)所花的时候。