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

Я вижу, что разработчики часто развиваются против решения, содержащего все проекты (27) в системе. Это вызывает проблемы с продолжительностью сборки (5 минут), производительность Visual Studio (например, латентность intellisense), а также не заставляет разработчика задумываться о зависимостях проекта (до тех пор, пока они не получат циклическую проблему с ссылкой).

Разве это хорошая идея разбить такое решение на более мелкие решения, которые можно компилировать и тестировать независимо от решения "матери"? Существуют ли какие-либо потенциальные проблемы с этим подходом?

Ответы

Ответ 1

Позвольте мне повторить ваши вопросы:

Это хорошая идея - разбить решение, подобное этому, на более мелкие решения.

ссылка на статью MSDN дает довольно четкое утверждение:

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

Кроме того, в статье рекомендуется, чтобы всегда имел один файл "master" в процессе сборки.

Существуют ли какие-либо потенциальные проблемы с этим подходом?

Вам придется иметь дело со следующими проблемами (что на самом деле может быть довольно сложно сделать, тот же источник, что и выше):

Модель с несколькими решениями страдает от следующие недостатки:

  • Вы вынуждены использовать ссылки на файлы, когда вам нужно ссылаться сборка, сгенерированная проектом в отдельное решение. Эти (в отличие проектные ссылки) не автоматическая настройка сборки зависимостей. Это означает, что вы должны решить проблему сборки решения порядок в рамках системы script. Хотя это можно управлять, оно добавляет дополнительная сложность процесса сборки.
  • Вы также вынуждены ссылаться на конкретную конфигурацию конфигурации DLL (например, выпуск или отладка версия). Ссылки на проекты автоматически управлять этим и ссылаться на текущий активный конфигурации в Visual Studio.NET.
  • Когда вы работаете с отдельными решениями, вы можете получить последний код (возможно, в других проектах) другими членами команды выполнять локальные интеграционное тестирование. Вы можете подтвердить что ничего не ломается, прежде чем вы проверите ваш код обратно в VSS готов к следующая система сборки. В мульти-решении системы это гораздо сложнее сделать, потому что вы можете проверить свое решение против других решений, только используя результаты предыдущей системы построить.

Ответ 2

В Visual Studio 2010 Ultimate есть несколько инструментов, которые помогут вам лучше понять и управлять зависимостями в существующем коде:

  • Графики зависимостей и проводник архитектуры
  • Диаграммы последовательности
  • Диаграммы слоев и валидация

Для получения дополнительной информации см. Изучение существующего кода. Visualization and Modeling Feature Pack обеспечивает поддержку графика зависимостей для кода С++ и C.

Ответ 3

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

Это вызывает проблемы с продолжительностью сборки

вы можете избежать этого, только создав проекты, которые вы изменили, и пусть CI-сервер выполнит всю сборку

Ответ 4

У нас есть решение из ~ 250 проектов.

Это нормально, после установки патча для Visual Studio 2005 для быстрой работы с чрезвычайно большими решениями [TODO add link].

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

Мы перепрограммировали ярлык F7 (сборка) для создания проекта запуска, а не всего решения. Это лучше.

Пакеты решений, похоже, решают проблему поиска вещей.

Зависимости добавляются только в проекты верхнего уровня (EXE и DLL), потому что, когда у вас есть статические библиотеки, если A является зависимостью B и B, является зависимость от C, A часто может не нуждаться в зависимости от C (в чтобы сделать вещи скомпилированы и запущены правильно), и таким образом, циклические зависимости в порядке для компилятора (хотя это очень плохо для психического здоровья).

Я поддерживаю наличие меньшего количества библиотек, даже если одна библиотека называется "library". Я не вижу существенного преимущества оптимизации рабочего пространства памяти процесса, предоставляя "только то, что ему нужно", и компоновщик должен делать это в любом случае на уровне объектных файлов.

Ответ 5

Единственный раз, когда я действительно вижу необходимость в нескольких решениях, это функциональная изоляция. Необходимые библиотеки для службы Windows могут отличаться от веб-сайта. Каждое решение должно быть оптимизировано для создания единого исполняемого файла или веб-сайта IMO. Это улучшает разделение беспокойства и упрощает восстановление функциональной части приложения без создания всего остального вместе с ним.

Ответ 6

Производительность Intellisense должна быть немного лучше в VS2010 по сравнению с VS2008. Кроме того, зачем вам постоянно восстанавливать все решение? Это произойдет, только если вы измените что-то рядом с корнем дерева зависимостей, иначе вы просто создадите проект, над которым вы сейчас работаете.

Мне всегда было полезно иметь все в одном решении, потому что я мог легко перемещаться по всей базе кода.

Ответ 7

Разве это хорошая идея разбить такое решение на более мелкие решения, которые можно компилировать и тестировать независимо от решения "матери"? Существуют ли какие-либо потенциальные проблемы с этим подходом?

Да, это хорошая идея, потому что:

  • Вы не хотите, чтобы VS замедляла решение с десятками VS-проектов.
  • Интересно только сосредоточиться на части кода, это навязывает понятие локальности кода, что хорошо.

Но главное, с чем нужно бороться, - иметь как можно меньше VS проектов/сборок. Моя компания опубликовала два бесплатные две белые книги, которые объясняют про/минусы использования сборок /VS project/namespaces для разделения большой базы кода.

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