кто-нибудь знает хорошую утилиту или программу для опроса решения или каталога для всех проектов и сообщает вам, где находятся циклические ссылки, и, возможно, компилировать по порядку.
Помню, видел когда-то давно, но нигде не могу найти..
кто-нибудь знает хорошую утилиту или программу для опроса решения или каталога для всех проектов и сообщает вам, где находятся циклические ссылки, и, возможно, компилировать по порядку.
Помню, видел когда-то давно, но нигде не могу найти..
NDepend — превосходный инструмент, который может делать это и многое другое. Может быть, это излишество для того, что вы хотите, но есть пробная версия, так что посмотрите...
Я знаю, что это поздний ответ, но я обнаружил, что ответы GraemeF и tsilb не показали никакой зависимости между двумя сборками. Похоже, если вы измените порядок зависимостей (Assembly A ссылается на B, но вы переключите его на B, ссылаясь на A strong>), он оставляет зависимость в порядке сборки. Чтобы решить эту проблему, откройте диалоговое окно «Свойства» для своего решения, перейдите к «Общие свойства», а затем «Зависимости проекта». Найдите сборку A и удалите зависимость от сборки B. Это позволит вам добавить ссылку в обычном режиме.
Вы можете просмотреть дерево зависимостей через System.Reflection. Когда вы строите дерево, при добавлении узла вы должны проверить, не являются ли какие-либо родители узла тем же проектом или сборкой, что и тот, который вы добавляете. Если это правда, выдать пользователю исключение.
Выбрасывать технические исключения, подобные этому, нормально, если ваши пользователи будут людьми, которые знают, как работают ссылки на сборки и исключения — такие люди, как разработчики :)
Если вы используете ссылки project между проектами в своем решении, правильный порядок сборки будет автоматически определяться Visual Studio (или MSBuild). Это, конечно, ломается, если вы используете ссылки на сборки. Также Visual Studio не позволит вам добавлять циклические ссылки project.
Я унаследовал гигантское визуальное студийное решение с несколькими круговыми эталонными путями. Я написал скрипт linqpad, чтобы помочь найти циклическую цепочку ссылок:
https://github.com/ronnieoverby/linqpad-utils/blob/master/Find%20circular%20references.linq
Моя реализация, вероятно, наивна, но у меня она работала достаточно быстро.