Вот как мы это делаем (мы также ISV, и мы используем TFS):
У нас есть внутренняя структура, которую используют все наши продукты. Инфраструктура включает в себя базовые классы для нашего уровня доступа к данным, такие службы, как ведение журнала, служебные функции, элементы управления пользовательским интерфейсом и т. Д.).
Итак, у нас есть командный проект для нашей среды:
Framework \ v1.0 \ Main \ Framework
(обратите внимание на повторение "framework", выглядит странно, но это важно)
Затем у нас есть командный проект для каждого продукта, и мы разрабатываем фреймворк в командном проекте:
ProductName \ v1.0 \ Main \ ProductName
ProductName \ v1.0 \ Main \ Framework (ветвь от \ Framework \ v1.0 \ main \ Framework, мы делаем эту ветку доступной только для чтения)
любой код в "\ Main \ ProductName" может ссылаться на любой код в \ Main \ Framework
Далее, если нам нужно создать рабочие ветки нашего продукта, мы просто разветвляемся на "Main" следующим образом:
ProductName \ v1.0 \ WIP \ MyBranch \ (ответвление от Main, где MyBranch == Main)
Это дает нам 2 действительно интересных функции:
Я могу создавать ветки, не путая мои ссылки, пока держу все под «Основным» вместе. Это потому, что VS будет использовать относительные пути к ссылкам, и до тех пор, пока я все вместе держу под заголовком Main (и я НЕ ссылаюсь ни на что "выше" main, относительные пути остаются нетронутыми.
Если я обновлю «реальную» среду (в папке \ Framework \ v1.0)), я могу выбрать для каждого продукта, когда я хочу объединить эти обновления структуры в базу кода продукта.
(это действительно полезно, если вы используете разделяемые библиотеки, потому что он отделяет внутренние выпуски вашей общей платформы от внешних выпусков ваших продуктов). Если вы просто переходите в общие библиотеки, одна из проблем, с которой вы столкнетесь, - это «коллизии», когда изменение вашего общего кода требует внесения изменений в код вашего продукта, чтобы оставаться совместимым. Разветвив свой общий код, вы можете обновить свою платформу, не оказывая немедленного воздействия на все ваши продукты одновременно.