7

NGen 对我的电脑不满意,我找不到深入了解问题所在的方法。

每次启动后,ngen 都会记录以下消息:

.NET 运行时优化服务 (clr_optimization_v2.0.50727_32) - 服务达到瞬时错误的限制。将关闭。从服务管理器返回的最后一个错误:0x8000ffff。

当我尝试在命令行启动优化服务时,我再次记录了同样的错误。

我设法启动了 ngen 服务并立即暂停队列(通过编写一个两行批处理文件,如下所示:

净启动 clr_optimization_v2.0.50727_32

ngen 队列暂停

所以现在我尝试通过执行不同状态级别的项目来清除队列,如下所示:

ngen executequeueditems 3 /nologo /verbose

但结果总是:

灾难性故障(HRESULT 异常:0x8000FFFF (E_UNEXPECTED))

...一路上我已经卸载/重新安装了 Visual Studio 2008。我已经卸载了 SQL Server 2005,并且我已经运行了“系统文件检查器”:sfc /scannow

缺乏想法,希望得到 ngen 专家的帮助。

我如何获得诸如“导致这些灾难性故障的原因是什么?”之类的信息。(请注意,/verbose 选项不会增加我发现的信息量。“要生成的队列中有哪些文件?”——我可以删除其中的一些文件,或者将责任归咎于特定文件。 ..

卸载和重新安装 .net framework 2.0 并不容易,因为这是 vista,它是操作系统的受保护部分。

更新:我也尝试过这里提供的建议(并在第一个回复中提到)——但我只是得到同样的灾难性失败消息。

C:\Windows\Microsoft.NET\Framework\v2.0.50727>ngen executequeueditems /nologo 灾难性故障(来自 HRESULT 的异常:0x8000FFFF (E_UNEXPECTED))

4

3 回答 3

3

在回答这部分问题时:

“是什么导致了这些灾难性的失败?”

有两个日志文件可以帮助回答这个问题:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen.log
C:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen_service.log

(以及通常的应用程序日志,虽然它不太有用)

回答:

“要生成的队列中有哪些文件?”

通常的答案是,这可以通过运行来查看:

ngen.exe display

(虽然在我的情况下它只返回

NGEN Roots:    
Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))

)

于 2009-02-12T13:31:57.513 回答
2

从此:_

当 .NET 运行时优化服务遇到它认为是暂时性错误时,它会尝试重新尝试编译程序集;示例包括 RPC 错误、内存不足错误等。但是,在尝试编译相同的程序集 20 次但仍然失败后,它会输出上述消息并关闭。我看到您已经尝试从您的计算机上卸载 .NET Framework 2.0 并重新安装它,但您仍然遇到此错误。我猜想尝试修复安装也无济于事。您可以尝试从 %WINDIR%\Microsoft.NET\Framework\v2.0.50727\ 运行“ngen.exe ExecuteQueuedItems”,然后运行“ngen.exe Update”吗?这将尝试编译所有不' 尚未通过优化服务同步任何/最新的 32 位 NGen 图像。更新命令完成后,您能否再次尝试启动服务并检查系统日志中是否仍然收到相同的消息?如果此问题不是特定于服务的,我希望您也会在命令行输出中看到编译错误。

于 2009-02-07T19:03:48.050 回答
1

我有同样的问题(安装 Asp MVC 1.0)。寻找答案时,我发现了 Haacked 博客,其中解释了一些原因。花了 2 个小时试图解决这个问题后,我感到非常沮丧,以至于我使用过

ngen /delete *

有效。但我不确定这是否不会造成小灾难;/

也许这会有所帮助..

于 2009-09-02T13:43:33.637 回答