1

我正在尝试使用 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's3264中)都在以 'v4.0...' 开头的文件夹中,四个在Framework's: Framework 中的 2 个Framework64中的两个(在每个 -一个在“v2.0 ...”中,一个在“v4.0 ...”中)。

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

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

4

1 回答 1

2

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

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

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

于 2013-09-08T11:45:21.873 回答