gpt4 book ai didi

c# - 如何使用 ngen.exe 编译以及如何运行生成的 native 代码?

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

我想为特殊目的使用 ngen 命令行编译 C# 程序。所以我在 VS2010 中创建了一个控制台应用程序并将其命名为 ngentest。在 vs2010\projects\ngentest\bin\debug 中创建名为 ngentest.vshost.exe 的文件。我在 VS2010 命令提示符中使用此文件作为 ngen 命令参数,如下所示:

ngen "c:\documents\vs2010\projects\ngentest\bin\debug\ngentest.vshost.exe"

但是当我这样做时,我无法收到 PublicKeyToken 并且我在任何地方都找不到任何程序集!如果创建了我的程序集,它在哪里?我怎样才能找到它?我如何运行它(使用命令,或...!)来获取我的输出?

否则,当我从 VS 的构建菜单中使用构建 ngen 构建我的项目时,会在提到的目录中创建一些文件,其中之一是 ngentest.exe

最佳答案

当您编译 C# 代码时,它会被编译成一个 IL 程序集。 NGEN 将 IL 程序集作为输入,并将程序集及其依赖项安装到 Native Image Cache 中。

对于您的示例二进制文件,您需要打开管理员 VS 命令提示符,然后键入以下内容

ngen install ngentest.exe

这会将您的 exe 及其依赖项 dll 文件安装到 native 图像缓存中。您在此处使用程序集的文件名。

然后,当您运行 exe 时,.NET 运行时将加载并运行安装到 native 图像缓存的 native 图像。您无需采取任何额外步骤即可让 .NET 运行 native 镜像。运行时检查 native 图像缓存以查看是否存在适用于 IL 程序集的有效 native 图像。

您可以通过键入以下命令来验证 native 镜像是否已安装:

ngen display ngentest

在这种情况下,您必须使用程序集名称。请注意,32 位 ngen 只会安装和显示 32 位程序集,而 64 位 ngen 只会安装和显示 64 位程序集。

参见 http://blogs.msdn.com/b/junfeng/archive/2007/02/18/native-image-loading.aspx有关 native 图像加载的更多信息。

请注意,ngentest.vhost.exe 是 VS 为提供更好的调试体验而创建的神器。它由VS使用。您不应该将其用于 NGEN 或任何与此相关的内容。见题:What is the purpose of the vshost.exe file?了解更多信息。

关于c# - 如何使用 ngen.exe 编译以及如何运行生成的 native 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20144213/

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