Просто поделюсь некоторым недавним опытом, который заставил меня немного изменить точку зрения на это ...
Сокращение 150 проектов в одном решении до 30 позволило сократить время сборки примерно до 25% от того, что было (1 минута и замена по сравнению с 5 минутами на нашей обычной машине для разработчиков). Если вы делаете ссылки на dll, это не имеет большого значения, но если вы включаете проекты в основное решение, вы можете обнаружить, что это важно. Честно говоря, я был немного удивлен этой разницей, но прошлые результаты не гарантируют будущую прибыль.
Каждый раз .net загружает dll в первый раз, вы берете JIT-файлы и загружаете файлы ввода-вывода. Для приложений WinForm / WPF, где пользователь может запускать его несколько раз в день, это представляет большую проблему, чем веб-приложения. Даже для приложений Winform / WPF это может быть не такой уж серьезной проблемой для многих приложений.
Другая вещь, на которую следует обратить внимание, - это сложные зависимости, которые вызывают ситуации, когда «если я использую A, я должен использовать B, потому что A выставляет типы из B. Между тем, я редко использую B сам по себе». Просто объедините его и покончено с этим.
Итак, я понимаю, что есть несколько конкретных причин для объединения. Вероятно, существует миллион субъективных причин, но в большом файле решения, кажется, лучше постараться быть простым, поскольку вы можете разумно осуществить.
Более субъективно, я бы также посоветовал вам рассматривать файл проекта как артефакт сборки, а не как артефакт кода. Думайте о файле .cs как о том, что вы действительно хотите использовать повторно, а не о .csproj. Конечно, большую часть времени вы также будете повторно использовать .csproj и просто все время собирать сборку одинаково. Но не пытайтесь заставить себя иметь зависимости или набрать больше кода, чем вам действительно нужно в вашем проекте @. Взаимосвязь между .csproj и .cs в большинстве случаев довольно слабая.
РЕДАКТИРОВАТЬ: @ - добавлено "в вашем проекте"