В моем отделе мы разрабатываем несколько небольших дополнений для какого-либо сервера унифицированных коммуникаций. Для управления версиями и распределенной разработки мы используем Team Foundation Server 2012.
Но есть только одно большое решение TFS для всех наших приложений и библиотек:
- Основное решение
- Приложения
- Приложение 1
- Приложение 2
- Приложение 3
- внешность
- Библиотеки
- Lib 1
- Lib 2
- инструменты
- Приложения
Путь «Приложение» содержит все основные приложения. Они не зависят друг от друга, но зависят от проектов Libraries и Externals.
Путь "Externals" содержит некоторые внешние библиотеки DLL, на которые есть ссылки в наших приложениях и библиотеках.
Путь к библиотекам содержит часто используемые библиотеки (шаблоны пользовательского интерфейса, классы помощников и т. Д.). Они не зависят друг от друга и упоминаются в проектах «Библиотеки» и «Инструменты».
Путь Tools содержит некоторые вспомогательные программы, такие как помощники по настройке, веб-службы обновления и т. Д.
Теперь есть несколько важных моментов, почему я хотел бы изменить эту структуру:
- Мы не можем использовать сборки сервера.
- Управлять скрамом TFS с помощью спринтов, препятствий и т. Д. С такой структурой решения неудобно.
- Каждый разработчик всегда имеет доступ ко всем проектам в решении.
- Полная сборка длится слишком долго, если случайно нажать [F6] в Visual Studio ...
Что бы вы изменили в этом решении? Как бы вы разбили эти проекты на более мелкие решения, как эти решения должны быть структурированы.
Мой первый подход заключается в создании одного проекта TFS для каждого приложения, библиотеки и инструмента. Но как я могу гарантировать, что, например, приложение 2 всегда содержит новейшую версию Lib 1? Нужно ли отслеживать изменения в Lib 1 и обновлять приложение 2 вручную, как только изменяется Lib? Или я могу как-то заставить Visual Studio всегда каким-либо образом использовать новейшую версию внешнего проекта?
Изменить: В TFS есть только одна коллекция командных проектов TFS, содержащая один командный проект TFS. Team Project содержит одно большое решение Visual Studio, которое содержит несколько папок, содержащих (см. Структуру выше), каждая из которых содержит несколько проектов VS.
Мой вопрос сейчас, как бы вы реорганизовать:
- Командные проекты TFS
- Проекты VS
Ответы:
Придерживайтесь одного TFS Team Project, наличие нескольких становится проблемой при попытке обновления и имеет некоторые ограничения, когда дело касается кросс-групповых рабочих проектов. Вместо этого вы должны интенсивно использовать области и итерации.
Разделите ваше решение VS на несколько решений, по одному на основное приложение. Это значительно ускорит локальные сборки, а также сервер сборки.
TFS2012 имеет новую концепцию под названием «Команды», создающую команду для каждого приложения и устанавливающую итерации по умолчанию и резервы для каждого. Таким образом, вы можете управлять резервом для каждого или просматривать корневую команду, чтобы увидеть свернутый журнал. Затем вы можете управлять спринтами либо на уровне приложения, либо в целом, в зависимости от того, что вам подходит.
Создайте пакеты NuGet для всех сторонних библиотек, на которые еще нет ссылок. Сохраните их в частном репозитории (общая папка Windows) и включите функцию восстановления пакетов для NuGet, щелкнув правой кнопкой мыши каждое решение и включив его (также разрешите восстановление пакетов для загрузки пакетов в настройках).
Если у вас есть общие внутренние библиотеки, создайте для них также пакеты NuGet и создайте решение vs, содержащее только эту библиотеку. Добавьте команду post build для создания пакета nuget или расширьте свой шаблон сборки tfs, чтобы сделать это (есть ряд шаблонов, которые уже делают это).
источник