Я добавлю опцию на ринг, она может или не может быть полезной для вас. Если это какое-то утешение, я размышлял над этим некоторое время сейчас и не смог найти полностью удовлетворительное решение. Это действительно хороший вопрос, и мне было бы очень интересно посмотреть, как другие решили эту проблему.
Я знаю, что считается хорошей идеей строить из исходного кода везде, где это возможно, но я не фанат ветвления между командными проектами. Если у вас есть какой-то общий код, и его нужно разветвить между 2 или 3 другими командными проектами, тогда ветвление управляемо, но если у вас есть 20 или 30 (или 100) командных проектов, то управление объединениями становится головной болью. Могут быть и другие проблемы, если разработчики, работающие в командных проектах-потребителях, не имеют одинаковых разрешений в «главном», например, не могут просматривать историю и т. Д. Конечно, если у вас есть код, который необходимо совместно использовать в командных проектах в разных коллекциях проектов, тогда вы все равно не сможете разветвляться.
Итак, имея в виду, я бы посоветовал вам обращаться с общим кодом так же, как вы можете обращаться со сторонней библиотекой и использовать двоичные ссылки. Как только вы придете к этому образу мышления, вам будет доступен ряд опций. (здесь есть несколько, но, вероятно, их больше)
Как я уже сказал, я очень интересно услышать, как другие SOer решают проблему общего кода с помощью TFS.
РЕДАКТИРОВАТЬ: После 8 лет размышлений об этом пакеты Nuget - это путь вперед. Я оставил остальную часть ответа на месте, так как он все еще получает мнения и положительные голоса. Встраивание зависимостей в пакеты и их хранение в бинарном хранилище (nuget / Nexus / Artifactory / Azure Artifacts и т. Д.) В значительной степени является стандартным способом решения этой проблемы