Хотя я восхищаюсь вашим стремлением сохранить все как одно большое решение, я думаю, что это потеряет некоторые из лучших возможностей, которые TFS может предложить в области автоматизированных сборок, придерживаясь этого.
Причина, по которой я это говорю, заключается в том, что вы можете использовать сборки, запускаемые при регистрации, чтобы немедленно собрать код, чтобы доказать, что он работает (или, что еще лучше, использовать проверку Gated).Полезность этих сборок обратно пропорциональна времени, затрачиваемому на их запуск.Таким образом, если у вас есть масштабное решение, для сборки которого требуется 20 минут, оно лишит вас преимуществ этих типов сборок.Однако, если у вас было несколько небольших решений, которые занимали около 5 минут каждое, то вы получите только модифицированные решения, основанные на регистрации, и узнаете результаты раньше.
Из того, что вы перечислили выше, я был бысклонен иметь решение для каждого набора артефактов, которые могут быть выпущены отдельно.В вашем примере это, вероятно, по одному для каждого из клиентов, по одному для каждого веб-приложения и по одному для всех общих библиотек.
Структура папок не будет сильно отличаться от того, что у вас есть выше (при условии, что я правильно его интерпретирую)
/OverallApplication
/Clients
/Client1
-Client1.sln
/Client1Project1
-Client1Project1.csproj
/Client1Project2
-Client1Project1.csproj
...
...
/Components
-Components.sln
/ClassLibrary1
-ClassLibrary1.csproj
/ClassLibrary2
-ClassLibrary2.csproj
...
/Server
/WebApp1
-WebApp1.sln
/WebApp1Project1
-WebApp1Project1.csproj
/WebApp1Project2
-WebApp1Project1.csproj
...
...
/CodeSigningKey
-KeyPair.snk
/ReferencedAssemblies
/Manufacturer1
-Manufacturer1Assembly1.dll
...
...
Общие библиотеки по-прежнему можно добавлять в качестве ссылок на проекты в решениях сервера и клиента.Я представил несколько новых папок для общих элементов, таких как ключ подписи кода и сторонние сборки, на которые есть ссылки (например, Enterprise Library).
Кроме того, вы захотите использовать ветвлениекакая-то стратегия, позволяющая разделить ветви кода Main, Dev и Release.Для этого я рекомендую немного прочитать руководство по ветвлению ALM Rangers на codeplex.http://vsarbranchingguide.codeplex.com/releases