因此,据我了解,它确实需要写入一个可执行文件/ 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] 删除。
我来说两句