Сопоставление зависимостей с картами кода

В этой статье вы узнаете, как визуализировать зависимости в коде с помощью карт кода.

Что такое карты кода?

В Visual Studio карты кода помогают быстрее узнать, как код программы подходит вместе, не считывая файлы и строки кода. С помощью этих карт вы можете увидеть организацию и связи в коде, включая ее структуру и его зависимости, как обновить ее и оценить стоимость предлагаемых изменений.

View dependencies with code maps in Visual Studio

Сопоставлять зависимости в коде можно на следующих языках:

  • Visual C# или Visual Basic в решении или сборках (DLL или EXE)

  • Собственный или управляемый код C или C++ в проектах Visual C++, файлы заголовков (h или #include) или двоичные файлы

  • проекты и сборки X++, созданные из модулей .NET для Microsoft Dynamics AX.

Примечание.

Для проектов, отличных от C# или Visual Basic, меньше вариантов запуска карты кода или добавления элементов в существующую карту кода. Например, нельзя щелкнуть объект правой кнопкой мыши в редакторе текста проекта C++ и добавить его на карту кода. Однако можно перетаскивать отдельные элементы кода или файлы из Обозреватель решений, представления классов и браузера объектов.

Необходимые компоненты

Чтобы создать карту кода в Visual Studio, сначала установите компоненты сопоставления кода и динамической проверки зависимостей.

Для создания и редактирования карт кода требуется выпуск Visual Studio Enterprise. Однако в выпусках Visual Studio Community и Professional можно открывать схемы, созданные в выпуске Enterprise, но их нельзя редактировать.

Примечание.

Прежде чем совместно использовать карты, созданные в Visual Studio Enterprise, с другими пользователями, использующими Visual Studio Professional, убедитесь, что все элементы на карте (например, скрытые элементы, развернутые группы и межгрупповые ссылки) отображаются.

Добавление карты кода

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

Чтобы добавить пустую карту кода, выполните следующие действия:

  1. В обозревателе решенийоткройте контекстное меню верхнего узла решения. Нажмите кнопку "Добавить>новый элемент".

  2. В диалоговом окне "Добавление нового элемента" в разделе "Установлен" выберите категорию "Общие".

  3. Выберите шаблон "Направленный документ Графа " (DGML), а затем нажмите кнопку "Добавить".

    Совет

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

    Пустая карта отображается в папке "Элементы решения" решения.

Аналогичным образом можно создать файл карты кода, не добавляя его в решение, выбрав "Схема нового кода архитектуры>" или "Создать>файл".>

Подробнее:

Создание карты кода для решения

Чтобы просмотреть все зависимости в решении, выполните следующие действия.

  1. В строке меню выберите "Схема создания кода архитектуры>" для решения. Если код не изменился с момента его создания, вместо этого можно выбрать >схему создания кода архитектуры для решения без создания.

    Generate a code map command

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

  2. Чтобы открыть список значков, обозначающих различные типы проектов (такие как тестовый, веб- или телефонный проект), элементов кода (таких как классы, методы и свойства) и типов отношений (таких как «Наследует от», «"Реализует» и «Вызывает»), нажмите кнопку Условные обозначения .

    Top-level dependency graph of assemblies

    Решение в этом примере включает папки решений (Тесты и Компоненты), тестовые проекты, веб-проекты и сборки. По умолчанию все отношения вложения представляются в виде групп, которые можно развернуть и свернуть. Группа Внешние содержит объекты вне решения, в том числе зависимости платформы. Во внешних сборках отображаются только используемые элементы. Для удобства системные базовые типы на карте по умолчанию скрыты.

  3. Чтобы детализировать карту, разверните группы, представляющие проекты и сборки. Чтобы развернуть все компоненты, выделите все узлы нажатием клавиш CTRL+A , а затем последовательно выберите в контекстном меню пункты Группаи Развернуть .

    Expanding all groups in a code map

  4. В большом решении это не пригодится. Более того, если решение комплексное, ограничения памяти могут не позволить развернуть все группы. Вместо этого разворачивайте отдельные интересующие вас узлы. Наведите указатель мыши на верхнюю часть узла и нажмите на значок шеврона (стрелка вниз), когда он появится.

    Expanding a node in a code map

    Также можно выбрать нужный элемент с помощью клавиатуры и нажать клавишу+. Чтобы изучить более глубокие уровни кода, проделайте то же самое для пространств имен, типов и членов.

    Совет

    Дополнительные сведения о работе с картами кода с помощью мыши, клавиатуры и сенсорного ввода см. в разделе "Обзор и изменение порядка карт кода".

  5. Чтобы упростить карту и выделить ее отдельные части, выберите Фильтры на панели элементов в карте кода и отметьте только те типы узлов и связей, которые вас интересуют. Например, можно скрыть все контейнеры папки решения и сборки.

    Simplify the map by filtering containers

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

  6. Чтобы просмотреть отношения между элементами, выберите их на карте. Цвета связей обозначают типы отношений, как показано на панели Условные обозначения .

    View dependencies across your solutions

    В этом примере фиолетовые связи обозначают вызовы, пунктирные — ссылки, а голубые — доступ к полю. Зеленые связи могут представлять наследование, а также совокупные связи , обозначающие сразу несколько видов отношений (или категорий).

    Совет

    Если отображается зеленая связь, это не обязательно означает наличие только отношения наследования. Это могут быть также вызовы методов, но они скрыты за отношением наследования. Чтобы просмотреть определенные типы ссылок, используйте поля проверка в области "Фильтры", чтобы скрыть нужные типы.

  7. Для получения дополнительных сведений об элементе или связи наведите указатель на элемент или связь и дождитесь появления подсказки. Подсказка будет содержать подробные сведения об элементе кода или представляемых связью категориях.

    Show the categories of a relationship

  8. Чтобы проверить элементы и зависимости, представленные совокупной связью, выберите связь и откройте ее контекстное меню. Выберите пункт Показать добавляющие ссылки (или Показать добавляющие ссылки на новой карте кода). Программа развернет группы на обоих концах связи и отобразит только те элементы и зависимости, которые участвуют в связи.

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

    Drilling down to class and member level

  10. Еще один способ концентрации в комплексном решении — это создать новую карту с выбранными элементами существующей карты. Удерживайте клавиши CTRL при выборе элементов, на которые вы хотите сосредоточиться, откройте контекстное меню и выберите пункт "Создать граф" из выделенного фрагмента.

    Show selected items on a new code map

  11. Выбранные элементы будут добавлены в новую карту вместе с контекстом. Скрыть папки решения и другие контейнеры, которые вы не хотите видеть с помощью панели "Фильтры".

    Filter the containers to simplify the view

  12. Разверните группы и выберите элементы на карте, чтобы просмотреть отношения.

    Select items to view the relationships

См. также:

Просмотр зависимостей

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

Show specific dependencies on a code map

  1. В Обозреватель решений выберите проекты, ссылки на сборки, папки, файлы, типы или элементы, которые необходимо сопоставить.

    Select the items you want to map

  2. На панели инструментов Обозреватель решений выберите "Показать на картеCreate New Graph From Selected Nodes Button кода". Или откройте контекстное меню для одной или группы элементов и выберите "Показать на карте кода".

    Вы также можете перетаскивать элементы из Обозреватель решений, представления классов или обозревателя объектов в новую или существующую карту кода. Чтобы включить родительскую иерархию для элементов, нажмите и удерживайте клавишу CTRL во время перетаскивания элементов или нажмите кнопку "Включить родители " на панели инструментов карты кода, чтобы указать действие по умолчанию. Вы также можете перетаскивать файлы сборок извне Visual Studio, например из Windows Обозреватель.

    Примечание.

    При добавлении элементов из проекта, совместно используемого в нескольких приложениях, таких как Windows Телефон или Microsoft Store, эти элементы отображаются на карте с текущим активным проектом приложения. Если изменить контекст на другой проект приложения и добавить дополнительные элементы из общего проекта, эти элементы отобразятся на карте с новым активным проектом приложения. Операции, выполняемые с элементом на карте, применяются только к тем элементам, которые имеют общий контекст.

  3. На картах кода выбранные элементы отображаются в сборках, частью которых они являются.

    Selected items shown as groups on the map

  4. Для исследования элементов разверните их. Наведите указатель мыши на элемент и щелкните значок шеврона (стрелка вниз), когда он появится.

    Expand a node in a code map

    Чтобы развернуть все элементы, выберите их с помощью клавиш CTRL+A, а затем откройте контекстное меню карты и выберите пункт "Развернуть группу".> Этот параметр недоступен, если при развертывании всех групп карта кода станет непригодна к использованию или возникнут проблемы с памятью.

  5. При необходимости продолжайте расширять интересующие вас элементы, вплоть до уровня класса и члена.

    Expand groups to class and member level

    Чтобы увидеть элементы, которые находятся в коде, но не отображаются на карте, щелкните значок Refetch Children Icon Refetch Children в верхнем левом углу группы.

  6. Для просмотра дополнительных элементов, связанных с элементами на карте, выделите нужный элемент и выберите команду Показать связанные на панели инструментов карты кода. После этого выберите тип связанных элементов, которые нужно добавить на карту. Кроме того, выберите один или несколько элементов, откройте контекстное меню и выберите параметр "Показать " для типа связанных элементов, добавляемых на карту. Например:

    Для сборкивыберите пункт:

    Параметр Описание
    Показать сборки, на которые ссылается эта сборка Добавьте сборки, на которые ссылается данная сборка. Внешние сборки приводятся в группе Внешние .
    Показать сборки, которые ссылаются на эту сборку Добавьте в решение сборки, которые ссылаются на данную сборку.

    Для пространства именвыберите пункт Показать содержащую сборку, если она еще не открыта.

    Для класса или интерфейсавыберите пункт:

    Параметр Описание
    Показать базовые типы Для класса добавьте базовый класс и реализованные интерфейсы.

    Для интерфейса добавьте базовые интерфейсы.
    Показать производные типы Для класса добавьте производные классы.

    Для интерфейса добавьте производные интерфейсы и реализующие классы или структуры.
    Показать типы, на которые ссылается этот тип Добавьте все классы и их члены, используемые данным классом.
    Показать типы, которые ссылаются на этот тип Добавьте все классы и их члены, которые используют данный класс.
    Показать содержащее пространство имен Добавьте родительское пространство имен.
    Показать содержащие пространство имен и сборку Добавьте родительскую иерархию контейнера.
    Показать все базовые типы Рекурсивно добавьте иерархию базовых классов или интерфейсов.
    Показать все производные типы Для класса рекурсивно добавьте все производные классы.

    Для интерфейса рекурсивно добавьте все производные интерфейсы и реализующие классы или структуры.

    Для методавыберите пункт:

    Параметр Описание
    Показать методы, вызываемые этим методом Добавьте методы, вызываемые данным методом.
    Показать поля, на которые ссылается это поле Добавьте поля, на которые ссылается данный метод.
    Показать содержащий тип Добавьте родительский тип.
    Показать содержащие тип, пространство имен и сборку Добавьте родительскую иерархию контейнера.
    Показать переопределенные методы Для метода, переопределяющего другие методы или реализующего метод интерфейса, добавьте все абстрактные или виртуальные методы в переопределенные базовые классы и реализованный метод интерфейса (если имеется).

    Для поля или свойствавыберите пункт:

    Параметр Описание
    Показать содержащий тип Добавьте родительский тип.
    Показать содержащие тип, пространство имен и сборку Добавьте родительскую иерархию контейнера.

    Show methods called by this member

  7. На карте показаны отношения. В этом примере карта показывает методы, вызываемые методом Find и их расположением в решении или во внешнем режиме.

    Show specific dependencies on a code map

  8. Чтобы упростить карту и выделить ее отдельные части, выберите Фильтры на панели элементов в карте кода и отметьте только те типы узлов и связей, которые вас интересуют. Например, отключите отображение папок решения, сборок и пространств имен.

    Use the Filter pane to simplify the display