【发布时间】: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 下的两个(在GAC 的32 和64)都在以“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 应用程序的本机映像?
【问题讨论】: