Причины для проектов C# для перестройки в Visual Studio

У меня есть большое решение из примерно 320 проектов, где даже небольшие изменения в одной веб-форме приводят к длительному времени сборки для тестирования / отладки небольших изменений. Я подозреваю, что задачи копирования файлов после сборки "касаются" времени файлов и вызывают многократные перестройки.

Существуют ли другие причины, по которым VS 2010 запускает перестройку, кроме исходных файлов, которые являются более новыми, чем двоичные выходные файлы, в отсутствие каких-либо сильных влияний на именование и управление версиями?

ДОБАВЛЕНИЕ: я не имею непосредственного влияния на размер или форму исходного дерева. Это основа стабильного основного продукта, и любые краткосрочные "некоммерческие" изменения считаются рискованными или дорогостоящими. Я затрону вопросы, упомянутые в ответах, которые я получу здесь, как вклад в будущие направления проекта.

5 ответов

Решение

C# перестраивается, потому что файл был изменен, или зависимость была изменена, но также часто по "очевидной причине". Вы можете часто собирать 2 или 3 раза подряд, не внося ни одного изменения, и C# откатит и перестроит огромное количество кода.

Включите Сервис> Параметры> Проекты и решения> Построить и запустить> Создавать только запускаемые проекты и зависимости при запуске. Это минимизирует сборку только до тех зависимостей проекта, которые вы намереваетесь выполнить, поэтому, если все не является одним огромным деревом зависимостей, это значительно сократит количество проектов, рассматриваемых в сборке.

Лучшее решение, однако, состоит в том, чтобы в первую очередь не просить его скомпилировать.

  • Каждый проект добавляет дополнительные издержки к сборке. На моем ПК это около 3 секунд. Объединяя код двух проектов в один файл.csproj, я экономлю 3 секунды времени сборки. Таким образом, для более 300 проектов вы можете сократить время сборки на 10 минут, просто объединив проекты - то есть, где это возможно, используйте много модулей / пространств имен в одной сборке, а не во многих сборках. Вы увидите, что время запуска вашего приложения также улучшилось.

  • Многие проекты не нуждаются в постоянном строительстве. Разбейте их как библиотечные проекты и просто ссылки на (ссылки) на двоичные файлы

  • Также отключите "копировать локальные" и вместо этого укажите все выходные пути в общую папку - это значительно сократит накладные расходы, избегая создания 320 копий 320 библиотек по всему жесткому диску.

  • Добавьте новые конфигурации сборки (например, "Debug FastBuild"), которые собирают только те сборки, над которыми вы фактически работаете. С помощью менеджера конфигурации вы можете отменить пометку проектов, которые вы не хотите создавать, и, прежде всего, они игнорируются системой сборки. После того, как вы получите код из системы контроля версий, соберите полную сборку "Debug", чтобы обновить все, а затем переключитесь обратно на "fastbuild"

Вы можете попытаться построить свое решение, используя msbuild и /v:d (для ведения журнала диагностики).

В журнале могут быть подсказки, почему проект не обновлен.

Я думаю, что в 320 проектах вы давно превысили предел того, что Visual Studio было разработано для комфортного выполнения.

Здесь есть много полезных советов, но если вам действительно нужно сохранить 320 проектов, вы можете отказаться от Visual Studio для сборки и разработки собственного процесса сборки.

Как я уже говорил в своем комментарии, по крайней мере для Windows, моя рекомендация для инструмента сборки - это psake, который построен на PowerShell (и, следовательно, включен в каждую современную машину Windows), достаточно мощный и достаточно легкий, чтобы передать все это вашему источнику. контроль.

Во-первых, убедитесь, что ссылки на другие проекты являются ссылками ПРОЕКТА, а не ссылками на сборки.

Во-вторых, проверьте циркулярные ссылки.

В-третьих, установите подробное описание ведения журнала на DIAGNOSTIC и посмотрите на самую первую строку и выясните, почему он перестраивает проекты после создания решения в первый раз.

Можно проверить еще много всего, но сначала взгляните на эти 3 вещи.

320 Projects - это много файлов в дереве зависимостей: все они должны быть проверены на наличие изменений механизмом сборки. Использование чего-то вроде Process Monitor позволит вам увидеть, какие файловые операции происходят, чтобы подтвердить это.

Также 320 сборок (поверх сборок.NET Framework), загружаемых во время выполнения, замедляют работу вашего приложения и действительно замедляют отладчик (много символов для загрузки). Посмотрите на отладку | Windows | Модули, чтобы увидеть загруженные модули).

Помимо сокращения количества проектов в решении (вполне возможно иметь несколько решений, каждый из которых имеет подмножество проектов), вам действительно нужно столько отдельных проектов? Вне отладчика загрузчик.NET загружает и JIT-код только из сборок по мере необходимости, более крупные сборки не означают более медленного времени загрузки и позволяют избежать накладных расходов на сборку из загрузчика Windows.

Другие вопросы по тегам