Ngen错误,因为“Mscorlib.dll没有本机映像”(仅限x64,仅限.NET 4.0)

时间:2013-09-08 11:14:05

标签: c# .net native ngen

我正在尝试使用64位Windows 7使用Ngen生成.NET 4.0应用程序的本机映像。平台设置为x64(或任何CPU ) - Ngen失败,抱怨“ NGen无法继续,因为Mscorlib.dll没有原生图像。”

当编译为x86并使用适当的Ngen时 - 它工作正常。此外,将.NET版本更改为2.0时 - 它可以工作。 (当尝试使用x86 Ngen来创建x64应用程序时,它告诉我应该使用64位版本。)

更多信息

这是我在CMD中看到的(部分):椭圆(= ...)出现在原文中。

  

1> 编译程序集 mscorlib ,版本= 4.0.0.0,文化=中性,   PublicKeyToken = b77a5c561934e089(CLR v4.0.30319)......

     

1> mscorlib ,版本= 4.0.0.0,文化=中性,   公钥= b77a5c561934e089

  

2 - ;编译程序集辅助功能,版本= 4.0.0.0,   Culture = neutral,Public KeyToken = b03f5f7f11d50a3a(CLR v4.0.30319)...

  

2> Ngen无法为图片辅助功能生成本机代码,   Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a   由于以下错误: NGen无法继续,因为   Mscorlib.dll没有本机映像(来自HRESULT的异常:   0x80131F06)

C:\Windows\assembly内搜索我发现3 mscorlib.dll 。一个位于GAC_32中,一个位于GAC_64中(均位于以2.0.0.0开头的子文件夹中),另一个位于子文件夹temp中。

C:\Windows\Microsoft.NET内搜索时,我发现其中有六个:assembly下的GAC 32 64Framework两个文件夹使用'v4.0 ...',以及{{1}}中的4个:框架中的2个,以及 Framework64 中的两个(每个 - 一个在'中) v2.0 ......'和'v4.0中的一个......')。

这是否意味着只有.NET 2.0 mscorlib才真正作为原生图像运行(需要时)?为什么Ngen不能成功保存.NET 4.0的原生图像?

底线:如何创建面向x64的.NET 4.0应用程序的本机映像?

1 个答案:

答案 0 :(得分:2)

这是不健康的。当您的计算机上安装了.NET时,应该已经创建了mscorlib.dll的ngen-ed映像。它位于c:\ windows \ assembly \ NativeImages_v4.0.30319_64 \ mscorlib \ ab0a8fc3d086a3aaf942f366a12a9185 \ mscorlib.ni.dll。我不确定目录名称的哈希部分是否从一台机器重复到另一台机器。

使用Windows资源管理器无法看到此文件,必须使用命令提示符。去检查它是否存在,如果缺少.NET,安装.NET时会出现严重错误。 “.NET运行时优化服务”是完成该工作的服务,请确保您没有将其禁用。

标准错误是从未提升的命令提示符运行ngen.exe。