在x64系统上,针对x86应用程序使用哪个ngen?

3

我提出这个问题是因为没有找到清晰的答案。我的WPF程序是x86 (.Net 4.5.2)。我使用Inno Setup进行安装并创建ngen映像。如果在64位系统上安装,应该使用Microsoft.NET\Framework64\v4.0.30319\ngen.exe,在32位系统上安装时,则应该使用Microsoft.NET\Framework\v4.0.30319\ngen.exe吗?还是因为程序是x86,我应该始终使用Microsoft.NET\Framework\v4.0.30319\ngen.exe?


你需要在目标机器上创建本地镜像,即与目标机器相同的处理器。 - Vignesh.N
2个回答

2

通过从命令行运行ngen.exe,你可以很容易地自己尝试。 明确的是,这种混合方式行不通,因为它对此非常详细。 我编辑输出以得到核心消息:

1>Ngen未能为映像文件 C:\projects2\ConsoleApplication491\bin\Debug\ConsoleApplication491.exe 生成本机代码,因为出现以下错误:该映像文件与您正在运行的Ngen版本不兼容。 对于32位程序集,请使用32位Ngen;对于64位程序集,请使用64位Ngen。 (HRESULT 异常:0x80131F07)

使用一个针对x86目标的小测试项目,并且运行的是64位版本的ngen.exe。


1
当您的程序集针对AnyCPU时,NGEN会变得不太清晰。在这种情况下,它将根据您运行的NGEN版本成功生成32位或64位的映像。但是,在64位Windows系统上(现在大多数都是),只有在您专门为64位创建映像时,Fusion才会选择ngened映像。请注意,启动VS2017命令提示符时的默认NGEN版本是32位版本,因此可能会相当令人困惑。 - Abel

1

x86(32位应用程序)可以在32位和64位Windows机器上运行。

x64只能在64位Windows机器上运行。

因此,如果您在Visual Studio中编译时将应用程序定位为x86应用程序,则应在32位和64位Windows机器上使用32位ngen


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接