Что касается имен файлов - я предпочитаю, чтобы имя файла моего проекта совпадало с именем выходной сборки, потому что это намного облегчает узнать, что и что производит. Создание списка каталогов намного быстрее, чем поиск файлов csproj в дереве для того, который производит сборку, которая мне нужна.
Я не забочусь о файлах решений, потому что они не влияют на нашу среду сборки, поэтому я в итоге сделал свой собственный, чтобы получить именно ту область, которую я хочу (и конкретные элементы для решения, такие как тестовые метаданные, Я хочу).
Что касается структуры папок - я не слишком беспокоюсь, если папки, ведущие вниз по файлам проекта, соответствуют пространствам имен. Я хочу, чтобы мой код размещался на диске таким образом, чтобы это было наиболее целесообразно для проекта. Иногда это означает, что тестовый код и код продукта находятся в одноуровневых каталогах - иногда это означает, что они намного дальше друг от друга. Иногда существует пространство имен, которому способствуют несколько команд (не пропагандируя этот дизайн, а просто реальность), но эти команды хотят жить в своих собственных папках по любой причине.
Не забывайте о важности стратегий ветвления управления версиями в вашем общем проекте. Границы Компании и Продукта могут быть филиалами и, следовательно, не обязательно должны быть представлены в виде каталогов на диске.
Не позволяйте этому быть источником паралича анализа. Сделай разумный выбор. Используйте контроль версий. Вы всегда можете измениться позже, если ошибаетесь.