我有一个使用Visual Studio 2008构建的.NET 3.5类库项目。
如果我尝试在此解决方案文件中验证核心组件,NGEN永远不会完成,或者至少在我不打算让它运行的时候(比如一夜之间)。
还有其他人经历过这个吗?如果是这样,你解决了吗?如果你这样做了,怎么样?你采取了什么措施?
如果这是NGEN中的错误,我该如何将其发布给Microsoft?我有一个连接帐户,但是我在哪里发布这个特定产品的错误报告,而不是.NET类(我知道去哪里)。
有问题的类库可以在这里找到:
有问题的程序集是LVK.Core程序集。
更新:完成了.NET 4.0的NGEN,但这花费了将近15分钟:
time /t
12:44:39
ngen install lvk.core.dll
Microsoft (R) CLR Native Image Generator - Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Installing assembly C:\Dev\VS.NET\LVK\LVK.Core\bin\x86\Debug\lvk.core.dll
Compiling assembly C:\Dev\VS.NET\LVK\LVK.Core\bin\x86\Debug\lvk.core.dll (CLR v2.0.50727) ...
LVK.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=8dbb1dd9b1276c0a <debug>
time /t
12:59:24
更新#2:在Microsoft Connect中创建了问题。
答案 0 :(得分:2)
后来发现这是Tuple<...>
泛型类的实现。
事实证明,通过NGEN调用的JIT过程将为以下类型创建每个Tuple<...>
类型的NGEN版本:
由于我有多达16个通用参数的Tuple版本,只是为了很好的衡量,NGEN正在忙着为所有值类型生成Tuple<T1, T2, T3, T4, ..., T16>
的每个组合。
我将类型数量减少到更少的通用参数,NGEN现在完成了。