Моя ситуацияКак уменьшить MSBuild раз
В C# проекта Сейчас я работаю над мы имеем довольно большое решение (80+ проектов). Теперь время восстановления 5 минут + действительно становится проблемой при использовании MSBuild от Visual Studio 2008.
В анализе я на прошлой неделе выяснилось, что мое время сборки было потрачено следующим образом:
Копирование файлов в проекты и переписывание его проектов, которые зависят от него (CopyToLocal), и т.д. . (60%)
Вызов постройке для декомпиляции/компиляции. (20%)
Ведение фактической компиляции и т.д. (20%)
Помимо «обычной» проект bin\debug
папки выход также копируются на внешний каталог, чтобы настроить основной ' загрузчик ". Основная структура программы немного как это:
\loader\bin\loader.exe
\loader\plugin\plugin1\plugin1.dll
\loader\plugin\plugin1\somedependency.dll
Что я сделал
В попытке сделать что-то идет немного быстрее, я подумал о следующем:
Copy все файлы в один большой каталог bin и не используют CopyTolocal. Мне это не нравится, потому что мы больше не можем использовать разные версии одних и тех же DLL-файлов, и мой каталог bin становится довольно беспорядочным.
Use parallelism (/m) for MSBuild. Это помогает очень мало в времени сборки.
Постарайтесь уменьшить зависимость между проектами, что всегда хорошо, конечно.
Инвестировать в оборудование. Я нашел research on solid-state drives, но это не кажется многообещающим.
Мой вопрос
Я также заметил, что, когда я внести изменения в проект, который находится в корне моего дерева зависимостей все становится перестраивать. Даже если изменение было только в «частной» части, и интерфейс проекта не изменился.
MSBuild использует временную метку зависимых проектов, чтобы определить, нуждается ли проект в восстановлении?
Можно ли изменить это на другое состояние? Например, контрольная сумма файла?
Помимо этого конкретного предложения, я был бы очень признателен за все предложения по увеличению времени сборки.
Возможный дубликат [Улучшение времени сборки CI (.NET)] (http://stackoverflow.com/questions/8633313/improving-ci-build-time-net) –