gpt4 book ai didi

c# - ngen 是如何工作的?

转载 作者:可可西里 更新时间:2023-11-01 10:05:31 25 4
gpt4 key购买 nike

因此,据我所知,它确实需要一个用 MSIL 编写的可执行文件/dll 文件。并执行 JIT 作业:将 MSIL 代码转换为 native 机器代码。正确的?所以跑了ngen使用以下命令生成我的程序的 native 图像:

ngen install myProgram.exe

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

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

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

最佳答案

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

把它想象成编写动态链接到 C++ 运行时的 native 程序,必须安装 C++ 运行时程序才能运行。 .net 没有像 native 应用程序那样的静态链接,您必须始终安装运行时。

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

关于c# - ngen 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29464018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com