首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ngen是怎么工作的?

ngen是怎么工作的?
EN

Stack Overflow用户
提问于 2015-04-06 00:57:54
回答 1查看 573关注 0票数 2

因此,据我所知,它确实采用了一个用MSIL编写的可执行/dll文件,并完成了JIT-作业:将MSIL代码转换为本机代码。对吗?因此运行ngen来使用以下命令生成我的程序的本机映像:

代码语言:javascript
复制
ngen install myProgram.exe

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

但是那个可执行文件的内容到底是什么呢?我的C#程序的机器代码版本?它不运行(见下文)。如果我想向用户提供我的程序的本机版本,如果我在每个*.exe*.dll中运行*.exe*.dll并将生成的图像文件提供给用户,它会运行良好吗?它还需要.NET框架吗?

然而,生成的图像不起作用,并给出了“此应用程序无法在您的PC上运行”错误信息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-06 01:53:40

正确的是,ngen将JIT代码编译成机器代码,但仍然需要.net运行时库来运行该程序。如果您的目标是创建一个不需要.net框架的程序,那么它将无法工作。

想象一下,就像编写一个动态链接到C++运行时的本机程序一样,必须安装c++运行时才能使程序工作。.net没有本地应用程序那样的静态链接,您必须始终安装运行时。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29464018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档