Если ваши сервисы предназначены для совместного использования, сгруппируйте их в одну сборку. Я видел системы с загруженными zillions dll (и решения с zillions проектами в них), где не было ни одного случая, когда нужно было выбирать одну сборку поверх любой другой. Это не препятствует тому, чтобы у вас было разделение и нормальное разделение в пространствах имен.
Что касается производительности, то никакого реального влияния на количество загруженных библиотек DLL нет (если вы остаетесь в здравом уме и не обращаетесь к тысячам из них), но это влияние ОГРОМНО в процессе разработки, если вы придерживаетесь поведения VS по умолчанию кто любит копировать каждую ссылку в каталоге bin / debug каждого проекта. На средних и больших решениях (1000 классов) процесс сборки будет намного длиннее и сложнее.
Думайте о сборке как о единице развертывания. Если материал предназначен для совместного использования, поместите его в одну сборку.
В качестве предупреждения о том, насколько разочаровывающим может быть разделение проекта на слишком много сборок, посмотрите на дистрибутив NUnit. Более 30 различных DLL, некоторые из которых вы должны ссылаться, чтобы иметь возможность пройти модульные тесты, некоторые нет, и вы в конечном итоге охотиться за типами, которые вам нужны.