Поскольку в Visual Studio проект компилируется в сборку, вы должны задать себе вопрос: «Сколько сборок мне нужно иметь?»
Если нет причин для отдельного использования сборок, не должно быть причин для их разделения на несколько проектов. Если у вас есть несколько сборок для обеспечения наслоения, для этого нужны пространства имен.
В идеальной конфигурации у вас должен быть один проект (= одна сборка) для каждого отдельного хоста в вашем приложении и один для вашей логики, не связанной с хостом.
YMMV, хотя, вы можете разделить проекты в зависимости от того, кто работает над различными частями, но на самом деле, попробуйте ограничить количество проектов в вашем решении (пока я пишу это, я борюсь с + проектное решение, так что я говорю из пропасти моего личного опыта).
Интересное обсуждение логического / физического разбиения приложений можно найти в блоге Патрика Смаккья (например, http://codebetter.com/blogs/patricksmacchia/archive/2008/02/10/layering-the-level-metric-and-the-discourse-of-method.aspx)