А что, в C# нельзя размещать исходники произвольно и задавать им отображаемую структуру с помощью "фильтров" (как в С++, файл имя_проекта.vcxproj.filters)? Понадобилось размесить исходники по пути ../src/project/<структура проекта> (путь относительно размещения csproj файла) — подправил непосредственно в csproj, и в результате получил плоский список всех файлов вместо иерархической структуры, которая была когда csproj лежал рядом с исходниками.