Любая причина, почему NGEN должен зависать и никогда не завершать для конкретной сборки? - PullRequest
2 голосов
/ 15 апреля 2010

У меня есть проект библиотеки классов для .NET 3.5, созданный с помощью Visual Studio 2008.

Если я попытаюсь NGEN собрать сборку ядра в этом файле решения, NGEN никогда не завершится, или, по крайней мере, не за то время, которое я удосужился запустить (как в одночасье).

Кто-нибудь еще испытывал это? И если да, то решили ли вы это? А если ты это сделал, то как? Какие шаги ты предпринял?

Если это ошибка в NGEN, как мне отправить это в Microsoft? У меня есть учетная запись подключения, но где я могу опубликовать отчет об ошибке для этого конкретного продукта вместо класса .NET (который я знаю, куда идти.)

Библиотеку классов можно найти здесь:

Проблемной сборкой является сборка LVK.Core.

Обновление : NGEN для .NET 4.0 завершен, но для этого потребовалось около 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 .

1 Ответ

2 голосов
/ 08 ноября 2010

Позднее выяснилось, что причиной этого является моя реализация Tuple<...> универсальных классов.

Оказывается, что процесс JIT при вызове через NGEN будет создавать версии NGEN каждого типа Tuple<...> для следующих типов:

  1. Одна общая версия для всех типов ссылок
  2. Одна версия для каждого типа значения

Поскольку у меня в Tuple-версиях было до 16 общих аргументов, просто для примера, NGEN была занята производством каждой комбинации, существующей для Tuple<T1, T2, T3, T4, ..., T16> для всех типов значений.

Я сократил количество типов до гораздо меньшего числа общих аргументов, и теперь NGEN завершает работу.

...