c#: Утилита для поиска циклических ссылок/компиляции в правильном порядке?

кто-нибудь знает хорошую утилиту или программу для опроса решения или каталога для всех проектов и сообщает вам, где находятся циклические ссылки, и, возможно, компилировать по порядку.

Помню, видел когда-то давно, но нигде не могу найти..


person mark smith    schedule 03.11.2009    source источник


Ответы (5)


NDepend — превосходный инструмент, который может делать это и многое другое. Может быть, это излишество для того, что вы хотите, но есть пробная версия, так что посмотрите...

person GraemeF    schedule 03.11.2009

Я знаю, что это поздний ответ, но я обнаружил, что ответы GraemeF и tsilb не показали никакой зависимости между двумя сборками. Похоже, если вы измените порядок зависимостей (Assembly A ссылается на B, но вы переключите его на B, ссылаясь на A), он оставляет зависимость в порядке сборки. Чтобы решить эту проблему, откройте диалоговое окно «Свойства» для своего решения, перейдите к «Общие свойства», а затем «Зависимости проекта». Найдите сборку A и удалите зависимость от сборки B. Это позволит вам добавить ссылку в обычном режиме.

person AWinkle    schedule 27.08.2015

Вы можете просмотреть дерево зависимостей через System.Reflection. Когда вы строите дерево, при добавлении узла вы должны проверить, не являются ли какие-либо родители узла тем же проектом или сборкой, что и тот, который вы добавляете. Если это правда, выдать пользователю исключение.

Выбрасывать технические исключения, подобные этому, нормально, если ваши пользователи будут людьми, которые знают, как работают ссылки на сборки и исключения — такие люди, как разработчики :)

person tsilb    schedule 03.11.2009

Если вы используете ссылки project между проектами в своем решении, правильный порядок сборки будет автоматически определяться Visual Studio (или MSBuild). Это, конечно, ломается, если вы используете ссылки на сборки. Также Visual Studio не позволит вам добавлять циклические ссылки project.

person andyp    schedule 03.11.2009
comment
›› Также Visual Studio не позволит вам добавлять циклические ссылки на проекты. Это хорошая функция. Если круговая ссылка представляет собой более чем двухточечную ссылку (например, A -> B -> C -> A), было бы неплохо, если бы VS предоставил вам больше информации о том, какие ссылки могут вызвать потенциальную циклическую ссылку. - person Thick_propheT; 17.09.2014

Я унаследовал гигантское визуальное студийное решение с несколькими круговыми эталонными путями. Я написал скрипт linqpad, чтобы помочь найти циклическую цепочку ссылок:

https://github.com/ronnieoverby/linqpad-utils/blob/master/Find%20circular%20references.linq

Моя реализация, вероятно, наивна, но у меня она работала достаточно быстро.

person Ronnie Overby    schedule 12.04.2017