Сопоставление зависимостей с картами кода
В этой статье вы узнаете, как визуализировать зависимости в коде с помощью карт кода.
Что такое карты кода?
В 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, убедитесь, что все элементы на карте (например, скрытые элементы, развернутые группы и межгрупповые ссылки) отображаются.
Добавление карты кода
Вы можете создать пустую карту кода и перетащить в нее элементы, включая ссылки на сборки, файлы и папки, или создать карту кода для всех или частей решения.
Чтобы добавить пустую карту кода, выполните следующие действия:
В обозревателе решенийоткройте контекстное меню верхнего узла решения. Нажмите кнопку "Добавить>новый элемент".
В диалоговом окне "Добавление нового элемента" в разделе "Установлен" выберите категорию "Общие".
Выберите шаблон "Направленный документ Графа " (DGML), а затем нажмите кнопку "Добавить".
Совет
Этот шаблон может не отображаться в алфавитном порядке, поэтому прокрутите вниз до нижней части списка шаблонов, если он не отображается.
Пустая карта отображается в папке "Элементы решения" решения.
Аналогичным образом можно создать файл карты кода, не добавляя его в решение, выбрав "Схема нового кода архитектуры>" или "Создать>файл".>
Подробнее:
Создание карты кода для решения
Чтобы просмотреть все зависимости в решении, выполните следующие действия.
В строке меню выберите "Схема создания кода архитектуры>" для решения. Если код не изменился с момента его создания, вместо этого можно выбрать >схему создания кода архитектуры для решения без создания.
Создается карта, показывющая сборки верхнего уровня и агрегированные связи между ними. Чем шире совокупная связь, тем больше зависимостей она представляет.
Чтобы открыть список значков, обозначающих различные типы проектов (такие как тестовый, веб- или телефонный проект), элементов кода (таких как классы, методы и свойства) и типов отношений (таких как «Наследует от», «"Реализует» и «Вызывает»), нажмите кнопку Условные обозначения .
Решение в этом примере включает папки решений (Тесты и Компоненты), тестовые проекты, веб-проекты и сборки. По умолчанию все отношения вложения представляются в виде групп, которые можно развернуть и свернуть. Группа Внешние содержит объекты вне решения, в том числе зависимости платформы. Во внешних сборках отображаются только используемые элементы. Для удобства системные базовые типы на карте по умолчанию скрыты.
Чтобы детализировать карту, разверните группы, представляющие проекты и сборки. Чтобы развернуть все компоненты, выделите все узлы нажатием клавиш CTRL+A , а затем последовательно выберите в контекстном меню пункты Группаи Развернуть .
В большом решении это не пригодится. Более того, если решение комплексное, ограничения памяти могут не позволить развернуть все группы. Вместо этого разворачивайте отдельные интересующие вас узлы. Наведите указатель мыши на верхнюю часть узла и нажмите на значок шеврона (стрелка вниз), когда он появится.
Также можно выбрать нужный элемент с помощью клавиатуры и нажать клавишу+. Чтобы изучить более глубокие уровни кода, проделайте то же самое для пространств имен, типов и членов.
Совет
Дополнительные сведения о работе с картами кода с помощью мыши, клавиатуры и сенсорного ввода см. в разделе "Обзор и изменение порядка карт кода".
Чтобы упростить карту и выделить ее отдельные части, выберите Фильтры на панели элементов в карте кода и отметьте только те типы узлов и связей, которые вас интересуют. Например, можно скрыть все контейнеры папки решения и сборки.
Карты можно также упростить, скрыв или удалив отдельные группы и элементы, но не меняя базовый код решения.
Чтобы просмотреть отношения между элементами, выберите их на карте. Цвета связей обозначают типы отношений, как показано на панели Условные обозначения .
В этом примере фиолетовые связи обозначают вызовы, пунктирные — ссылки, а голубые — доступ к полю. Зеленые связи могут представлять наследование, а также совокупные связи , обозначающие сразу несколько видов отношений (или категорий).
Совет
Если отображается зеленая связь, это не обязательно означает наличие только отношения наследования. Это могут быть также вызовы методов, но они скрыты за отношением наследования. Чтобы просмотреть определенные типы ссылок, установите флажки в области "Фильтры ", чтобы скрыть нужные типы.
Для получения дополнительных сведений об элементе или связи наведите указатель на элемент или связь и дождитесь появления подсказки. Подсказка будет содержать подробные сведения об элементе кода или представляемых связью категориях.
Чтобы проверить элементы и зависимости, представленные совокупной связью, выберите связь и откройте ее контекстное меню. Выберите пункт Показать добавляющие ссылки (или Показать добавляющие ссылки на новой карте кода). Программа развернет группы на обоих концах связи и отобразит только те элементы и зависимости, которые участвуют в связи.
Чтобы сосредоточиться на определенных частях карты, вы можете продолжать удалять элементы, которые вам не нужны. Например, чтобы получить детализированное представление класса и его членов, просто отфильтруйте все узлы пространства имен на панели Фильтры .
Еще один способ концентрации в комплексном решении — это создать новую карту с выбранными элементами существующей карты. Удерживайте клавиши CTRL при выборе элементов, на которые вы хотите сосредоточиться, откройте контекстное меню и выберите пункт "Создать граф" из выделенного фрагмента.
Выбранные элементы будут добавлены в новую карту вместе с контекстом. Скрыть папки решения и другие контейнеры, которые вы не хотите видеть с помощью панели "Фильтры".
Разверните группы и выберите элементы на карте, чтобы просмотреть отношения.
См. также:
- Просмотр и реорганизация карт кода
- Настройка карт кода путем редактирования DGML-файлов
- Поиск потенциальных проблем в коде путем запуска анализатора
Просмотр зависимостей
Предположим, что у вас есть проверка кода для выполнения в некоторых файлах с ожидающих изменений. Чтобы просмотреть зависимости в этих изменениях, создайте карту кода на основе этих файлов.
В Обозреватель решений выберите проекты, ссылки на сборки, папки, файлы, типы или элементы, которые необходимо сопоставить.
На панели инструментов Обозреватель решений выберите "Показать на карте кода". Или откройте контекстное меню для одной или группы элементов и выберите "Показать на карте кода".
Вы также можете перетаскивать элементы из Обозреватель решений, представления классов или обозревателя объектов в новую или существующую карту кода. Чтобы включить родительскую иерархию для элементов, нажмите и удерживайте клавишу CTRL во время перетаскивания элементов или нажмите кнопку "Включить родители " на панели инструментов карты кода, чтобы указать действие по умолчанию. Вы также можете перетаскивать файлы сборок извне Visual Studio, например из проводника Windows.
Примечание.
При добавлении элементов из проекта, совместно используемого в нескольких приложениях, таких как Windows Phone или Microsoft Store, эти элементы отображаются на карте с активным проектом приложения. Если изменить контекст на другой проект приложения и добавить дополнительные элементы из общего проекта, эти элементы отобразятся на карте с новым активным проектом приложения. Операции, выполняемые с элементом на карте, применяются только к тем элементам, которые имеют общий контекст.
На картах кода выбранные элементы отображаются в сборках, частью которых они являются.
Для исследования элементов разверните их. Наведите указатель мыши на элемент и щелкните значок шеврона (стрелка вниз), когда он появится.
Чтобы развернуть все элементы, выберите их с помощью клавиш CTRL+A, а затем откройте контекстное меню карты и выберите пункт "Развернуть группу".> Этот параметр недоступен, если при развертывании всех групп карта кода станет непригодна к использованию или возникнут проблемы с памятью.
При необходимости продолжайте расширять интересующие вас элементы, вплоть до уровня класса и члена.
Чтобы увидеть элементы, которые находятся в коде, но не отображаются на карте, щелкните значок Refetch Children в верхнем левом углу группы.
Для просмотра дополнительных элементов, связанных с элементами на карте, выделите нужный элемент и выберите команду Показать связанные на панели инструментов карты кода. После этого выберите тип связанных элементов, которые нужно добавить на карту. Кроме того, выберите один или несколько элементов, откройте контекстное меню и выберите параметр "Показать " для типа связанных элементов, добавляемых на карту. Например:
Для сборкивыберите пункт:
Вариант Описание Показать сборки, на которые ссылается эта сборка Добавьте сборки, на которые ссылается данная сборка. Внешние сборки приводятся в группе Внешние . Показать сборки, которые ссылаются на эту сборку Добавьте в решение сборки, которые ссылаются на данную сборку. Для пространства именвыберите пункт Показать содержащую сборку, если она еще не открыта.
Для класса или интерфейсавыберите пункт:
Вариант Описание Показать базовые типы Для класса добавьте базовый класс и реализованные интерфейсы.
Для интерфейса добавьте базовые интерфейсы.Показать производные типы Для класса добавьте производные классы.
Для интерфейса добавьте производные интерфейсы и реализующие классы или структуры.Показать типы, на которые ссылается этот тип Добавьте все классы и их члены, используемые данным классом. Показать типы, которые ссылаются на этот тип Добавьте все классы и их члены, которые используют данный класс. Показать содержащее пространство имен Добавьте родительское пространство имен. Показать содержащие пространство имен и сборку Добавьте родительскую иерархию контейнера. Показать все базовые типы Рекурсивно добавьте иерархию базовых классов или интерфейсов. Показать все производные типы Для класса рекурсивно добавьте все производные классы.
Для интерфейса рекурсивно добавьте все производные интерфейсы и реализующие классы или структуры.Для методавыберите пункт:
Вариант Описание Показать методы, вызываемые этим методом Добавьте методы, вызываемые данным методом. Показать поля, на которые ссылается это поле Добавьте поля, на которые ссылается данный метод. Показать содержащий тип Добавьте родительский тип. Показать содержащие тип, пространство имен и сборку Добавьте родительскую иерархию контейнера. Показать переопределенные методы Для метода, переопределяющего другие методы или реализующего метод интерфейса, добавьте все абстрактные или виртуальные методы в переопределенные базовые классы и реализованный метод интерфейса (если имеется). Для поля или свойствавыберите пункт:
Вариант Описание Показать содержащий тип Добавьте родительский тип. Показать содержащие тип, пространство имен и сборку Добавьте родительскую иерархию контейнера. На карте показаны отношения. В этом примере карта показывает методы, вызываемые методом
Find
и их расположением в решении или во внешнем режиме.Чтобы упростить карту и выделить ее отдельные части, выберите Фильтры на панели элементов в карте кода и отметьте только те типы узлов и связей, которые вас интересуют. Например, отключите отображение папок решения, сборок и пространств имен.
Связанный контент
- Обмен картами кода
- Создание карт кода для C++
- Повышение производительности карты кода
- Использование карт кода для отладки приложений
- Сопоставление методов в стеке вызовов при отладке
- Поиск потенциальных проблем с помощью анализаторов карт кода
- Просмотр и реорганизация карт кода
- Настройка карт кода путем редактирования DGML-файлов