因此,根据我的理解,它确实需要用MSIL
编写的可执行文件/ dll文件并执行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框架吗?
然而,生成图像并不起作用,并且“#34;此应用程序无法在您的PC上运行”#34;错误信息。
答案 0 :(得分:3)
你是正确的,ngen将JIT代码编译为机器代码,但你仍然需要.net运行时库来运行程序。如果您的目标是制作一个不需要.net框架的程序,它将无法工作。
将其想象为编写动态链接到C ++运行时的本机程序,必须安装c ++运行时才能使程序正常工作。 此外,您无法直接运行ngen构建的映像,当您运行ngen时,它会将其安装到程序集缓存(列出的目录)中,当您运行.net应用程序时,它会在缓存中找到副本并使用预生成的代码,你不能直接运行它。