GenerateResource / CoreResGen вдруг занимает почти в 30 раз больше времени - PullRequest
1 голос
/ 08 августа 2010

Начиная несколько недель назад, сборка проекта (VB.NET, .NET 2.0, VS 2010) заняла в несколько раз больше времени, чем раньше. В диспетчере задач я заметил, что ResXtoResources.exe некоторое время занимает много ЦП. Наконец-то я смог получить некоторые данные об этом, используя настройки вывода «Диагностика» в MSBuild, и сравнив их с тем, что я вижу в ветке несколько месяцев назад. Наиболее поразительными являются последние строки, которые дают время. До:

Target Performance Summary:
[..]
     1395 ms  CoreResGen                                 1 calls
     1930 ms  CompileLicxFiles                           1 calls
     2135 ms  GenerateApplicationManifest                1 calls
     2844 ms  CoreCompile                                1 calls

Task Performance Summary:
[..]
     1391 ms  GenerateResource                           1 calls
     1929 ms  LC                                         1 calls
     2134 ms  GenerateApplicationManifest                1 calls
     2843 ms  Vbc                                        1 calls

Build succeeded.

Time Elapsed 00:00:09.50
========== Rebuild All: 5 succeeded, 0 failed, 0 skipped ==========

После того, как:

Target Performance Summary:
     1348 ms  CompileLicxFiles                           1 calls
     1747 ms  GenerateApplicationManifest                1 calls
     2595 ms  CoreCompile                                1 calls
    39575 ms  CoreResGen                                 1 calls

Task Performance Summary:
     1347 ms  LC                                         1 calls
     1745 ms  GenerateApplicationManifest                1 calls
     2593 ms  Vbc                                        1 calls
    39570 ms  GenerateResource                           1 calls

Build succeeded.

Time Elapsed 00:00:47.34
========== Rebuild All: 5 succeeded, 0 failed, 0 skipped ==========

Оба проекта были скомпилированы в одной системе с одинаковыми настройками. Конечно, мы внесли множество изменений, но ничего такого, что могло бы оправдать такое изменение времени (и только для этой одной задачи!). Я предполагаю, что генерация ресурсов застревает на чем-то - циклическая ссылка, недостающая ссылка и т. Д. Однако я не смог найти ничего полезного о том, как отследить такую ​​проблему до того, что, как я предполагаю, представляет собой просто файл ресурса.

Если не считать тысячи проверок или временного удаления некоторых форм (и, следовательно, их файлов ресурсов) из проекта, могу ли я что-то еще сделать, чтобы выяснить проблему? Я не могу найти отдельные тайминги для каждого ресурса.

Результаты на данный момент:

Я создал новый пустой проект со всеми теми же .resx файлами.

  • Проблема не воспроизводится в .NET 4.0: компиляция точно такого же тестового проекта занимает менее секунды.
  • Эта проблема воспроизводится в .NET 2.0, как только я добавляю одну из форм из исходного проекта; очевидно, в противном случае он не скомпилирует ресурсы «должным образом».
  • Удаление отдельных файлов .resx сократит время «пропорционально»; то есть: я, к сожалению, не нашел ни одного файла, который является виновником.

Ответы [ 2 ]

1 голос
/ 20 августа 2011

Похоже, эта запись в блоге дает ответ.

В орехе, найдите в ваших .resx файлах ссылки на сборки, которые на самом деле не существуют (например, System.Windows.Forms, Version 4.0.0.0)и замените их на те, которые делают (Version 2.0.0.0).Для этого я использовал grepWin .

Мои CoreResGen / GenerateResource тайминги теперь примерно такие, как раньше.CruiseControl.NET сообщает, что время сборки сократилось с 92 секунд до 40. :)

0 голосов
/ 25 августа 2010

Я нашел причину здесь ... ресурсы содержали файл png, сохраненный в специальном формате Adobe Fireworks (PNG). Я экспортировал файл в png (без информации о слоях), и теперь компиляция занимает 6 секунд.

...