我正在尝试使用 64 位 Windows 7使用Ngen生成我的 .NET 4.0 应用程序的本机映像。当Platform设置为 x64(或Any CPU)时 - Ngen 失败,抱怨' NGen 无法继续,因为 Mscorlib.dll没有原生图像。
当编译为 x86 并使用适当的 Ngen - 它工作正常。此外,将 .NET 版本更改为 2.0 时,它可以工作。(当尝试使用 x86 Ngen 对 x64 应用程序进行 Ngen 时,它告诉我应该使用 64 位版本。)
更多信息:
这是我在 CMD 中看到的(部分)内容:省略号 (= ...) 出现在原始文件中。
1> 编译程序集mscorlib , Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 (CLR v4.0.30319) ...
1> mscorlib,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089
.
2> 编译程序集 Accessibility,Version=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
's32
和64
中)都在以 'v4.0...' 开头的文件夹中,四个在Framework
's: Framework 中的 2 个和Framework64中的两个(在每个 -一个在“v2.0 ...”中,一个在“v4.0 ...”中)。
这是否意味着只有 .NET 2.0 mscorlib 真正作为本机映像运行(在需要时)?为什么 Ngen 不能成功保存 .NET 4.0 的本机映像?
底线:如何创建面向 x64 的 .NET 4.0 应用程序的本机映像?