c# :Утилита для поиска циклических ссылок / компиляции в правильном порядке?
-
13-09-2019 - |
Вопрос
кто-нибудь знает хорошую утилиту или программу, которая запросит решение или каталог для всех проектов и сообщит вам, где находятся циклические ссылки и по порядку возможна компиляция..
Я помню, что видел один некоторое время назад, но нигде не могу его найти..
Решение
NDepend это отличный инструмент, который сделает это и многое другое.Может быть, это излишество для того, что вы хотите, но есть пробная версия, так что взгляните...
Другие советы
Я знаю, что это поздний ответ, но я обнаружил, что использование ответов GraemeF и tsilb не показало зависимости между двумя сборками.Это выглядит так, как если бы вы изменили порядок зависимостей на обратный (Сборка A ссылки B, но вы переключаете его на B ссылающийся A), это оставляет зависимость в порядке сборки.Чтобы решить эту проблему, откройте диалоговое окно Свойств вашего решения, перейдите к Общим свойствам, а затем к зависимостям проекта.Найдите Сборка A и удалите зависимость от Сборка B.Это позволит вам добавить ссылку в обычном режиме.
Вы могли бы изучить дерево зависимостей с помощью System.Отражение.При построении дерева, добавляя узел, вы должны проверить, являются ли какие-либо родительские элементы узла тем же проектом или сборкой, что и добавляемый вами.Если true, выдайте пользователю исключение.
Использование технических исключений, подобных этому, нормально, если вашими пользователями будут люди, которые знают, как работают ссылки на сборки и исключения - люди, подобные разработчикам :)
Если вы используете проект ссылки между проектами в вашем решении правильный порядок сборки будет определен автоматически Visual Studio (или MSBuild).Это, конечно, нарушается, если вы используете ссылки на сборку..Кроме того, Visual Studio остановит вас от добавления circular проект ссылки.
Я унаследовал гигантское решение Visual Studio с несколькими циклическими ссылочными путями.Я написал скрипт linqpad, чтобы помочь найти циклическую цепочку ссылок:
https://github.com/ronnieoverby/linqpad-utils/blob/master/Find%20circular%20references.linq
Моя реализация, вероятно, наивна, но для меня она сработала достаточно быстро.