Несколько вещей, которые никто еще не упомянул
NDepend - отличный инструмент, который сделает это и многое другое. Может быть, это излишне для того, что вы хотите, но есть пробная версия, так что посмотрите ...
Вы можете отследить дерево зависимостей с помощью System.Reflection. При построении дерева при добавлении узла вы должны проверить, являются ли какие-либо родительские элементы узла тем же проектом или сборкой, что и добавляемый вами. Если это правда, выдайте исключение пользователю.
Выбрасывать технические исключения, подобные этому, можно, если вашими пользователями будут люди, которые знают, как работают ссылки на сборки и исключения - люди вроде разработчиков :)
Если вы используете ссылки проект между проектами в вашем решении, правильный порядок сборки будет автоматически определен Visual Studio (или MSBuild). Это, конечно, не работает, если вы используете ссылки на сборки .. Также Visual Studio не позволит вам добавлять циклические ссылки на проект .