Начиная несколько недель назад, сборка проекта (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
сократит время «пропорционально»; то есть: я, к сожалению, не нашел ни одного файла, который является виновником.