Я думаю, что это плохая идея по указанным вами причинам: в конечном итоге вы получите ссылки в производственном коде на тестовые сборки, плюс тот факт, что все ваши тесты скомпилированы в ваш рабочий код, если только вы не предпримете какое-то волшебство, чтобы исключить это.
Вы не говорите, почему тесты трудно найти. Если они отражают структуру того, что они тестируют, то найти их не сложнее, чем код, который они тестируют.
у вас должен быть CI-сервер, который все время запускает все тесты, так что даже если тесты не на стороне разработчиков, они не смогут уйти от факта, что они легко сломали сборку.
Мы склонны идти на тесты в их собственном проекте, но этот проект находится в подпапке Tests (или Tests.Integration или чего бы то ни было для тестов) сборки, которую они тестируют. Таким образом, тесты получаются, когда код для проекта извлекается, и у вас нет папок с тестовыми проектами, загрязняющих структуру каталогов на уровне проекта. Но в итоге у вас есть как минимум 1 тестовый проект для каждой сборки. Я думаю, что это нормально, если у вас не много небольших сборок, но в этом случае вам действительно нужно иметь код для всех них в идеале все время, или вы могли бы просто иметь код для сборок, над которыми вы работаете локально, а другие сборки просто ссылаются на dll?