因此,据我所知,它确实采用了一个用MSIL编写的可执行/dll文件,并完成了JIT-作业:将MSIL代码转换为本机代码。对吗?因此运行ngen来使用以下命令生成我的程序的本机映像:
ngen install myProgram.exe这需要一段时间,但我发现生成的文件位于C:\Windows\assembly\NativeImages_v4.0.30319_32\myProgram\db1496cf0295bbe6a9242d86c0d8e091\myProgram.ni.exe
但是那个可执行文件的内容到底是什么呢?我的C#程序的机器代码版本?它不运行(见下文)。如果我想向用户提供我的程序的本机版本,如果我在每个*.exe和*.dll中运行*.exe和*.dll并将生成的图像文件提供给用户,它会运行良好吗?它还需要.NET框架吗?
然而,生成的图像不起作用,并给出了“此应用程序无法在您的PC上运行”错误信息。
发布于 2015-04-06 01:53:40
正确的是,ngen将JIT代码编译成机器代码,但仍然需要.net运行时库来运行该程序。如果您的目标是创建一个不需要.net框架的程序,那么它将无法工作。
想象一下,就像编写一个动态链接到C++运行时的本机程序一样,必须安装c++运行时才能使程序工作。.net没有本地应用程序那样的静态链接,您必须始终安装运行时。
另外,您不能直接运行ngen构建的映像,当您运行ngen时,它会将其安装到程序集缓存(所列的目录)中,当您运行.net应用程序时,它会在缓存中找到副本并使用预先生成的代码,您无法直接运行它。
https://stackoverflow.com/questions/29464018
复制相似问题