ngen如何工作?

杰克

因此,据我了解,它确实需要写入一个可执行文件/ dll文件MSIL并执行JIT作业:将MSIL代码转换为本机代码。正确的?因此,运行ngen来使用以下命令生成我的程序的本机映像:

ngen install myProgram.exe

需要一段时间,但我发现生成的文件位于 C:\Windows\assembly\NativeImages_v4.0.30319_32\myProgram\db1496cf0295bbe6a9242d86c0d8e091\myProgram.ni.exe

但是该可执行文件的确切内容是什么?我的C#程序的机器代码版本?它不会运行(请参阅下文)。如果我想向用户提供我的程序的本地版本,如果我跑ngen在每个*.exe*.dll并给予生成图像文件给用户,它将会运行得很好?它仍然需要.NET框架吗?

但是,该生成图像不起作用,并显示“此应用程序无法在您的PC上运行”错误消息。

斯科特·张伯伦

您是正确的,ngen将JIT代码编译为机器代码,但是您仍然需要.net运行时库来运行该程序。如果您的目标是制作不需要.net框架的程序,则它将无法正常工作。

可以将其想像为编写动态链接到C ++运行时的本机程序,必须安装c ++运行时才能使程序正常工作。.net没有像本机应用程序那样具有静态链接的等效功能,因此必须始终安装运行时。

另外,您不能直接运行ngen生成的映像,当您运行.net应用程序时,运行ngen会将其安装到程序集缓存(列出的目录)中,它会在缓存中找到副本并使用预先生成的代码,您可以不要直接运行它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章