Мы стремимся сделать каждый компонент решением, содержащим один или несколько проектов (или подкомпонентов) и тестовый проект. Тестовый проект содержит все юнит-тесты.
Затем мы организуем решения в дерево на основе модулей и компонентов, например:
//depot/MyProject/ASubSystem/AComponentOfTheSubSystem/ASubComponentWithAVSSolution
Решение будет содержать несколько проектов Visual Studio:
//depot/MyProject/ASubSystem/AComponentOfTheSubSystem/ASubComponentWithAVSSolution/Something
//depot/MyProject/ASubSystem/AComponentOfTheSubSystem/ASubComponentWithAVSSolution/SomethingElse
//depot/MyProject/ASubSystem/AComponentOfTheSubSystem/ASubComponentWithAVSSolution/TestTheSolution
Возможно, глубина дерева больше или меньше, в зависимости от количества имеющихся компонентов / подкомпонентов. Мы также склонны иметь «общее» решение на уровне подсистем и подкомпонентов с общим материалом многократного использования.
Затем у нас есть решение на уровне подсистемы, которое связывает все вместе для построения подсистемы.
Мы не используем и не экспортируем в каталог «include». Мы позволяем Visual Studio создавать и связывать в наших песочницах. У нас есть отдельная песочница "Release", чтобы мы случайно не связали неправильную библиотеку.