Графік залежності проектів 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. Чи є якийсь інструмент, який би дав мені хороший графік залежностей проекту?

Відповіді:


39

Ви пробували NDepend? Це покаже вам залежності, а також ви можете проаналізувати зручність своїх класів і методів.

Їх веб-сайт:

http://ndepend.com


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

Ось як це виглядає в проекті OSS NopCommerce .

NDepend графік залежності від NopCommerce

Ось як це виглядає у всій бібліотеці класів .NET Core 3 (176 збірок).

введіть опис посилання тут

Відмова: Я працюю в NDepend


3
оригінальний плакат не сказав, що ndepend є безкоштовним, і це вирішує проблему.
честь krystan

6
Можливо, на момент написання цієї відповіді це було вільно, але зараз це не так.
Levente Koncz

@ patrick-from-ndepend-team, будь ласка, не редагуйте безпосередньо мою відповідь і не відкривайте нову відповідь.
Еріаван Кусумавардхоно

Добре @EriawanKusumawardhono вибачте, якщо це для вас проблема. Таким чином читачі отримують більше деталей, і це покращує корисність відповідей, чи хочете я видалити зайві деталі та знімки екрана?
Патрік з команди NDepend

@PatrickfromNDependteam додаткові деталі та знімки екрана в порядку. але оскільки це спочатку моя відповідь, схоже, що ваша редакція якось змушує мене виглядати як робота в NDepend. Будь ласка, додайте нову відповідь зі своєю редакцією, а також підкресліть, що ваша нова відповідь є доповненням до моєї відповіді. Дякую раніше :)
Eriawan Kusumawardhono

169

Мені потрібно було щось подібне, але я не хотів платити (або встановлювати) інструмент для цього. Я створив швидкий скрипт 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, а не зіставити весь проект. Спасибі
Jon

З якими версіями Visual Studio це працює? Крім того, для візуалізації C ++ замість C # проектів достатньо змінити суфікс файлу .csproj на .vcproj? Робота з VS 2005 тут, і я отримую порожній файл результатів ...
ssc

1
Це було написано проти проекту 2010 року для C #, але ви, ймовірно, могли його переробити дуже легко, переглянувши XML всередині проекту C ++ та скоригувавши код :-)
Danny Tuppeny,

5
@ssc У моєму блозі є трохи оновлений код, який може бути простішим: " blog.dantup.com/2012/05/…
Danny Tuppeny

5
Якщо ви використовуєте Powershell 2.0 вам потрібно буде додати =$trueдо Mandatoryі ValueFromPipelineпараметрам
MoMo

79

Оновлення: ReSharper з версії 8 має вбудовану функцію "Перегляд залежностей проекту" .

Версія ReSharper <8 має внутрішню функцію показу графіків залежності за допомогою перегляду yFiles. Дивіться короткий посібник внизу публікації.

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

Як

  1. Встановіть тут інструмент yEd .
  2. Запустіть VS аргументом командного рядка /resharper.internal.
  3. Перейдіть до ReSharper / Internal / Show залежності.
  4. Вкажіть проекти, які потрібно включити до «великої картини».
  5. Зніміть прапорець "Виключити термінальні вузли ...", якщо вам це не потрібно.
  6. Натисніть «Показати».
  7. Використовуйте ієрархічний макет у yEd (Alt + Shift + H)
  8. Надіслати відгук =)

2
Також Resharper> Inspect> Hierarchy Project, щоб отримати список проектів, що посилаються на поточний
Lu55

5
Resharper> Архітектура> 'Показати діаграму залежності проекту'
д-р Blowhard

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 . Дивіться також як: Створюйте графіки залежностей для коду C та C ++
Естер-вентилятор - MSFT

1
Спробував це, кинув виняток. Мабуть, MS ніколи не тестувала це на чомусь, крім кількох проектів. На мою думку абсолютно нікчемний.
C Джонсон

1
Мало того, це теж жахливо повільно. Я зробив би це -10, якби міг. Я написав власний прогулянковий залежність проекту (для нашої власної системи побудови), і це було блискавично порівняно з тим у візуальній студії.
C Джонсон

@CJohnson Я погоджуюся, що це повільно і схильно кидати винятки для великих рішень, але все ж краще, ніж нічого. Я змусив його працювати, закривши всі програми, зупинивши деякі сервіси та перезапустивши Visual Studio.
WynandB

Для мене великі рішення - це близько 600 проектів з мільйонами рядків коду. Немає шансів, що зупинка кількох послуг є прийнятною обробкою для мене.
C Джонсон

19

Я написав інструмент, який може вам допомогти. VS Solution Dependency Visualizer аналізує проектні залежності в рамках рішення та створює діаграму залежності з цієї інформації, а також текстовий звіт.


З якими версіями Visual Studio і з якими проектами працює ця робота? VS 2005 / C ++ тут ​​і інструмент, здається, нічого не робить ...
ssc

це безумовно працює з vs 2008/2010 та .csproj / .vbproj. не тестував на vs2005, але в даний час .vcproj файли не розпізнаються
devio

Цей інструмент показує лише файл рішення після його аналізу :-(. Не моє про 300 проектів.
thersch

@thersch, якщо ви хочете, щоб я ознайомився з цим, будь ласка, поштовуйте .sln та файли проекту (щоб збереглася оригінальна структура каталогів), завантажте його на спільний доступ до файлів та зв’яжіться зі мною через мій блог. thx
devio

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 : http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads


VS 2012 Professional також? Або лише VS 2012 Ultimate?
Кікенет

@Kiquenet Ви можете створити графіки залежності в VS 2012 Ultimate. Ви можете відкривати та вносити обмежені зміни в Premium та Pro.
Естер Фан - MSFT

5

Щоб виконати відповідь на eriawan на графіках, створених NDepend, див. Знімки екрана нижче. Ви можете завантажити і використати безкоштовне пробне видання NDepend на деякий час.

Детальніше про графік залежності залежності від NDepend введіть тут опис зображення

Детальніше про матрицю залежності NDepend : введіть тут опис зображення

Відмова: Я є членом команди інструментів


NDepend призначений для .NET, його клон CppDepend призначений для C ++ та працює з файлами .vcxproj
Патрік з команди NDepend

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 перейменував модуль графіка залежності в кодову карту

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


"Для створення та редагування карт коду вам потрібна редакція Visual Studio Enterprise. У спільнотах Visual Studio і Professional ви можете відкривати діаграми, сформовані в Enterprise Edition, але ви не можете їх редагувати."
MatthewT

1

Ця розширена версія сценарію PS від Danny Tuppeny містить як проект, так і зовнішні посилання:

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

Це ранній етап, але він працював для моїх потреб :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.