【问题标题】:Ngen error because "Mscorlib.dll does not have a native image" (x64 only, .NET 4.0 only)Ngen 错误,因为“Mscorlib.dll 没有本机映像”(仅限 x64,仅限 .NET 4.0)
【发布时间】:2013-09-12 01:03:35
【问题描述】:

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

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

更多信息

这是我在 CMD 中看到的(部分):省略号 (= ...) 出现在原始文件中。

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

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

.

2> 编译程序集可访问性,版本=4.0.0.0, Culture=neutral, Public KeyToken=b03f5f7f11d50a3a (CLR v4.0.30319) ...

.

2>Ngen 无法为图像辅助功能生成本机代码, 版本=4.0.0.0,文化=中性,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 下的两个(在GAC3264)都在以“v4.0...”开头的文件夹中, Framework's 中有 4 个:Framework 中有 2 个,Framework64 中有 2 个(每个 - 一个在 'v2.0...' 和一个在 'v4 .0...')。

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

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

【问题讨论】:

    标签: c# .net native ngen


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。在c:\windows\assembly\NativeImages_v4.0.30319_64 中实际上有两个具有哈希名称的文件夹(您提供的哈希都没有),两者都包含mscorlib.ni.dll。 (我一直在寻找 mscorlib.dll。)我没有(故意)禁用运行时优化服务。而且我正在使用提升的命令提示符(我实际上一开始就犯了这个错误,但 Ngen 只是告诉我我需要提升的提示符)。我应该尝试重新安装 .net 4.0 吗?
    • 再次非常感谢您。您断言应该在 .net 的安装上创建 mscorlib.dll 的本机映像,这说服了我尝试修复 .net,因为这没有帮助 - 我卸载并重新安装了 .net 4.0 - 这解决了问题。
    • 我在全新的 Windows 8 Pro x64 快照安装中看到此错误。我有一个生成 VSTO 插件的安装程序,我的客户在他自己的环境中遇到了安装失败。我建立了一个环境来重现并确保它失败了。
    猜你喜欢
    • 1970-01-01
    • 2012-03-07
    • 2015-11-20
    • 2011-05-15
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多