Граф зависимостей проектов Visual Studio

130

В настоящее время я переношу большое решение (~ 70 проектов) с VS 2005 + .NET 2.0 на VS 2008 + .NET 3.5. В настоящее время у меня VS 2008 + .NET 2.0.

Проблема в том, что мне нужно перемещать проекты один за другим в новую платформу .NET, чтобы ни один проект .NET 2.0 не ссылался на проект .NET 3.5. Есть ли какой-нибудь инструмент, который дал бы мне хороший график зависимостей проекта?

Migol
источник

Ответы:

39

Вы пробовали NDepend? Он покажет вам зависимости, а также вы сможете проанализировать удобство использования ваших классов и методов.

Их сайт:

http://ndepend.com


Чтобы завершить ответ @Eriawan в апреле 2020 года, была выпущена версия NDepend 2020.1 с полностью перестроенным графиком зависимостей . Теперь он масштабируется для крупных решений, состоящих из сотен проектов, и предлагает множество средств навигации.

Вот как это выглядит в проекте NopCommerce OSS .

График зависимостей NDepend в NopCommerce

Вот как это выглядит во всей библиотеке классов .NET Core 3 (176 сборок).

введите описание ссылки здесь

Отказ от ответственности: я работаю в NDepend

Эриаван Кусумавардхоно
источник
4
оригинальный плакат не сказал, что ndepend был бесплатным, и это решает проблему.
krystan honor 02
6
Возможно, на момент написания этого ответа это было бесплатно, но сейчас это не так.
Левенте Конч,
@ patrick-from-ndepend-team, пожалуйста, не редактируйте мой ответ напрямую, а вместо этого открывайте новый ответ.
Эриаван Кусумавардхоно
Хорошо, @EriawanKusumawardhono, извините, если для вас это проблема. Таким образом, читатели получают более подробную информацию прямо, и это повышает полезность ответа. Вы хотите, чтобы я удалил лишние детали и скриншоты?
Патрик из команды NDepend
@PatrickfromNDependteam дополнительные детали и скриншоты в порядке. но поскольку это изначально мой ответ, похоже, что ваше редактирование каким-то образом заставляет меня выглядеть так, будто я работаю в NDepend. Пожалуйста, добавьте новый ответ с вашим изменением, а также подчеркните, что ваш новый ответ является дополнением к моему ответу. Спасибо раньше :)
Eriawan Kusumawardhono
170

Мне нужно было нечто подобное, но я не хотел платить (или устанавливать) инструмент для этого. Я создал быстрый сценарий PowerShell, который просматривает ссылки на проекты и вместо этого выводит их в удобном для yuml.me формате:

Function Get-ProjectReferences ($rootFolder)
{
    $projectFiles = Get-ChildItem $rootFolder -Filter *.csproj -Recurse
    $ns = @{ defaultNamespace = "http://schemas.microsoft.com/developer/msbuild/2003" }

    $projectFiles | ForEach-Object {
        $projectFile = $_ | Select-Object -ExpandProperty FullName
        $projectName = $_ | Select-Object -ExpandProperty BaseName
        $projectXml = [xml](Get-Content $projectFile)

        $projectReferences = $projectXml | Select-Xml '//defaultNamespace:ProjectReference/defaultNamespace:Name' -Namespace $ns | Select-Object -ExpandProperty Node | Select-Object -ExpandProperty "#text"

        $projectReferences | ForEach-Object {
            "[" + $projectName + "] -> [" + $_ + "]"
        }
    }
}

Get-ProjectReferences "C:\Users\DanTup\Documents\MyProject" | Out-File "C:\Users\DanTup\Documents\MyProject\References.txt"
Дэнни Таппени
источник
4
здорово. Я взял это и расширил его, чтобы просмотреть все подпроекты, затем снова расширил его, чтобы вместо этого использовать файл sln для отображения всего проекта. Спасибо
Джон
С какими версиями Visual Studio это работает? Кроме того, для визуализации C ++ вместо проектов C # достаточно изменить суффикс файла .csproj на .vcproj? Работаю с VS 2005 здесь, и я получаю пустой файл результатов ...
ssc
1
Он был написан для проекта 2010 года для C #, но вы, вероятно, могли бы очень легко настроить его, посмотрев на XML внутри проекта C ++ и
изменив
5
@ssc В моем блоге размещен слегка обновленный код, который, возможно, будет легче настроить: blog.dantup.com/2012/05/…
Дэнни Таппени
5
Если вы используете Powershell 2.0 вам нужно будет добавить =$trueк Mandatoryи ValueFromPipelineпараметрам
MoMo
79

Обновление: ReSharper, начиная с версии 8, имеет встроенную функцию «Просмотр зависимостей проекта» .

ReSharper версии <8 имеет внутреннюю функцию для отображения графиков зависимостей при использовании программы просмотра yFiles. См. Краткое руководство внизу сообщения.

введите описание изображения здесь

Как

  1. Установите инструмент yEd отсюда .
  2. Запустите VS с аргументом /resharper.internal командной строки.
  3. Перейдите в ReSharper / Internal / Show Dependencies.
  4. Укажите проекты, которые вы хотите включить в «общую картину».
  5. Снимите флажок «Исключить конечные узлы ...», если он вам не нужен.
  6. Нажмите "Показать".
  7. Использовать иерархический макет в yEd (Alt + Shift + H)
  8. Оставить отзыв =)
Шкредов С.
источник
2
Также Resharper> Inspect> Project Hierarchy, чтобы получить список проектов, ссылающихся на текущий
Lu55,
5
Resharper> Архитектура> 'Показать диаграмму зависимостей проекта'
Д-р Блоухард
32

Вы можете легко получить график зависимостей проекта с помощью Visual Studio 2010 Ultimate, отсканируйте это видео до 5 минут, чтобы увидеть, как: http://www.lovettsoftware.com/blogengine.net/post/2010/05/27/Architecture-Explorer .aspx

В Visual Studio 2010 Ultimate: Архитектура | Сгенерировать график зависимостей | По сборке.

Крис Ловетт
источник
@CJohnson Вы можете сделать это для кода C и C ++, если у вас есть Visual Studio 2010 Feature Pack 2 . См. Также Практическое руководство. Создание графиков зависимостей для кода C и C ++
Эстер Фан - MSFT,
1
Пробовал, выбросил исключение. Судя по всему, MS никогда не тестировала его ни с чем, кроме нескольких проектов. На мой взгляд, абсолютно бесполезный.
C Johnson
1
Мало того, это еще и ужасно медленно. Я бы сделал это -10, если бы мог. Я написал свой собственный обходчик зависимостей проекта (для нашей собственной системы сборки), и он работал молниеносно по сравнению с таковым в Visual Studio.
C Johnson
@CJohnson Я согласен с тем, что он медленный и склонен к выбрасыванию исключений для больших решений, но все же это лучше, чем ничего. Я заставил его работать, закрыв все приложения, остановив некоторые службы и перезапустив Visual Studio.
WynandB
Для меня большие решения - это около 600 проектов с миллионами строк кода. Нет никаких шансов, что остановка нескольких сервисов для меня является приемлемым решением.
C Johnson
20

Я написал инструмент, который может вам помочь. VS Solution Dependency Visualizer анализирует зависимости проекта в решении и создает диаграмму зависимостей на основе этой информации, а также текстовый отчет.

devio
источник
С какими версиями Visual Studio и с какими проектами это работает? VS 2005 / C ++ вот здесь, и инструмент, похоже, ничего не делает ...
ssc
он определенно работает с vs 2008/2010 и .csproj / .vbproj. не тестировал с vs2005, но в настоящее время файлы
.vcproj
Этот инструмент показывает только файл решения после его анализа :-(. Не около 300 моих проектов.
thersch
@thersch, если вы хотите, чтобы я посмотрел на него, заархивируйте .sln и файлы проекта (чтобы сохранилась исходная структура каталогов), загрузите их в общий файловый ресурс и свяжитесь со мной через мой блог. thx
devio 03
9

У меня была аналогичная проблема, но она была еще более сложной, потому что несколько проектов ссылались на разные версии одной и той же сборки.

Чтобы получить вывод, который включает информацию о версии и проверки возможных проблем с загрузкой сборки во время выполнения, я сделал этот инструмент:

https://github.com/smpickett/DependencyViewer

(прямая ссылка на выпуск github: https://github.com/smpickett/DependencyViewer/releases )

Пикетт
источник
1
Хороший инструмент! Просто и эффективно. Спасибо за это! +1 от меня.
Бука
Действительно отличный инструмент! Я мечтал об этом много лет. Большое спасибо за то, что поделились этим!
alehro
8

Вы можете создать граф зависимостей своих проектов в VS 2010 Ultimate. Обозреватель архитектуры позволяет вам просматривать ваше решение, выбирать проекты и отношения, которые вы хотите визуализировать, а затем создавать граф зависимостей из вашего выбора.

Для получения дополнительной информации см. Следующие темы:

Как: создать документы графиков из кода : http://msdn.microsoft.com/en-us/library/dd409453%28VS.100%29.aspx#SeeSpecificSource

Как найти код с помощью обозревателя архитектуры : http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx

Загрузка RC : http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=457bab91-5eb2-4b36-b0f4-d6f34683c62a .

Форум Visual Studio 2010 Architectural Discovery & Modeling Tools : http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads

Эстер Фан - MSFT
источник
VS 2012 Professional тоже? Или только VS 2012 Ultimate?
Kiquenet
@Kiquenet В VS 2012 Ultimate можно создавать графы зависимостей. Вы можете открывать и вносить ограниченные изменения в Премиум и Про.
Esther Fan - MSFT
5

Чтобы завершить ответ Эриавана на графиках, созданных NDepend, см. Скриншоты ниже. Вы можете скачать и некоторое время использовать бесплатную пробную версию NDepend.

Подробнее о NDepend Dependency Graph введите описание изображения здесь

Подробнее о матрице зависимостей NDepend : введите описание изображения здесь

Отказ от ответственности: я являюсь частью команды разработчиков

Патрик из команды NDepend
источник
NDepend предназначен для .NET, его клон CppDepend предназначен для C ++ и работает с файлами .vcxproj
Патрик из команды
5

Решение Powershell - лучшее. Я адаптировал его в сценарий bash, который работает на моей машине (TM):

#!/bin/bash

for i in `find . -type f -iname "*.csproj"`; do
    # get only filename
    project=`basename $i`

    # remove csproj extension
    project=${project%.csproj}

    references=`cat $i | grep '<ProjectReference' | cut -d "\"" -f 2`
    for ref in $references; do
        # keep only filename (assume Windows paths)
        ref=${ref##*\\}

        # remove csproj extension
        ref=${ref%.csproj}

        echo "[ $project ] -> [ $ref ]"
    done

done
Николаос Георгиу
источник
3

VS 2019 переименовал модуль графа зависимостей в Code Map

вот официальная документация: https://docs.microsoft.com/en-us/visualstudio/modeling/map-dependencies-across-your-solutions?view=vs-2019

Стивен Дж.
источник
«Чтобы создавать и редактировать карты кода, вам нужна версия Visual Studio Enterprise. В версиях Visual Studio Community и Professional вы можете открывать схемы, созданные в версии Enterprise, но не можете их редактировать».
MatthewT
1

Эта расширенная версия сценария PS от Дэнни Таппени показывает как проектные, так и внешние ссылки:

Function Get-ProjectReferences($rootPath)
{
  $projectFiles = Get-ChildItem $rootPath -Filter *.csproj -Recurse
  $ns = @{ defaultNamespace = "http://schemas.microsoft.com/developer/msbuild/2003" }

  $projectFiles | ForEach-Object {
    $projectFile = $_ | Select-Object -ExpandProperty FullName
    $projectName = $_ | Select-Object -ExpandProperty BaseName
    $projectXml = [xml](Get-Content $projectFile)

    $projectReferences = $projectXml | Select-Xml '//defaultNamespace:ProjectReference/defaultNamespace:Name' -Namespace $ns | Select-Object -ExpandProperty Node | Select-Object -ExpandProperty "#text"
    $projectReferences | ForEach-Object {
        "PR:[" + $projectName + "]:[" + $_ + "]"
    }
  }

  $projectFiles | ForEach-Object {
    $projectFile = $_ | Select-Object -ExpandProperty FullName
    $projectName = $_ | Select-Object -ExpandProperty BaseName
    $projectXml = [xml](Get-Content $projectFile)

    $externalReferences = $projectXml | Select-Xml '//defaultNamespace:Reference/@Include' -Namespace $ns
    $externalReferences | ForEach-Object {
        "ER:[" + $projectName + "]:[" + $_ + "]"
    }

  }

}

Get-ProjectReferences "C:\projects" | Out-File "C:\temp\References.txt"

Это даст файл, разделенный двоеточиями, который можно открыть и проанализировать в Excel.

Свейн Терье Гауп
источник
-1

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

https://github.com/Audionysos/VSProjectReferencesViewer

Это ранняя стадия, но это сработало для моих нужд :)

Павел Аудионисос
источник