Настройка карт кода путем редактирования DGML-файлов
Чтобы настроить карту кода, вы можете изменить его файл языка разметки графа (DGML). Например, можно изменить элементы, чтобы указать пользовательские стили, назначить свойства и категории кодовым точкам и связям либо связать узлы с документы или URL-адреса с кодовыми точками или связями. Дополнительные сведения о элементах DGML см . в справочнике по языку разметки графов (DGML).
Измените DGML-файл карты кода в текстовом редакторе или редакторе XML. Если карта является частью решения Visual Studio, выберите ее в Обозреватель решений, откройте контекстное меню и выберите "Открыть с помощью", редактор XML (текст).
Примечание.
Чтобы создать карты кода, необходимо иметь выпуск Visual Studio Enterprise. Когда карта кода редактируется в Visual Studio, эта программа удаляет все неиспользуемые DGML-элементы и атрибуты при сохранении DGML-файла. Она также создает кодовые точки автоматически при добавлении новых связей вручную. При сохранении DGML-файла все атрибуты, добавляемые к элементу, могут самостоятельно упорядочиться в алфавитном порядке.
Элементы кода группы
Можно добавить новые группы или преобразовать существующие узлы в группу.
Откройте DGML-файл в текстовом редакторе или редакторе XML.
Чтобы преобразовать кодовую точку в группу, найдите элемент
<Node/>
для этой кодовой точки.- или -
Чтобы добавить новую группу, найдите раздел
<Nodes>
. Добавьте новый элемент<Node/>
.В элементе
<Node/>
добавьте атрибутGroup
, чтобы указать разворачивать группу при отображении или нет. Например:<Nodes> <Node Id="MyFirstGroup" Group="Expanded" /> <Node Id="MySecondGroup" Group="Collapsed" /> </Nodes>
В разделе
<Links>
убедитесь, что элемент<Link/>
со следующими атрибутами существует для каждой связи между кодовой точкой группы и дочерними кодовыми точками:Атрибут
Source
, который определяет кодовую точку группыАтрибут
Target
, который определяет дочернюю кодовую точкуАтрибут
Category
, который определяет отношениеContains
между кодовой точкой группы и ее дочерней кодовой точкойНапример:
<Links> <Link Category="Contains" Source="MyFirstGroup" Target="FirstGroupChildOne" /> <Link Category ="Contains" Source="MyFirstGroup" Target="FirstGroupChildTwo" /> <Link Category ="Contains" Source="MySecondGroup" Target="SecondGroupChildOne" /> <Link Category="Contains" Source="MySecondGroup" Target="SecondGroupChildTwo" /> </Links>
Дополнительные сведения об атрибуте
Category
см. в разделе "Назначение категорий элементам кода и ссылкам".
Изменение стиля карты
Цвет фона и цвет границы карты можно изменить в DGML-файле. Чтобы изменить стиль элементов кода и ссылок, см . статью "Изменение стиля элементов кода и ссылок".
Откройте DGML-файл в текстовом редакторе или редакторе XML.
В элементе
<DirectedGraph>
добавьте следующие атрибуты, чтобы изменить его стиль:Цвет фона
Background="ColorNameOrHexadecimalValue"
Цвет границы
Stroke="StrokeValue"
Например:
<DirectedGraph Background="Green" xmlns="http://schemas.microsoft.com/vs/2009/dgml" > ... ... </DirectedGraph>
Изменение стиля элементов кода и ссылок
Пользовательские стили можно применять к следующим кодовым точкам:
Отдельные кодовые точки и связи
Группы кодовых точек и связей
Группы кодовых точек и связей на основании определенных условий
Совет
При наличии повторяющихся стилей в большом числе кодовых точек и связей рекомендуется применить категорию к этим кодовым точкам и связям, а затем применить стиль к этой категории. Дополнительные сведения см. в разделе "Назначение категорий элементам кода" и "Ссылки" и "Назначение свойств элементам кода" и "Ссылки".
Применение пользовательского стиля к отдельной кодовой точке
Откройте DGML-файл в текстовом редакторе или редакторе XML.
Найдите элемент
<Node/>
кодовой точки. Добавьте любой из этих атрибутов, чтобы настроить его стиль:Цвет фона
Background="ColorNameOrHexadecimalValue"
Outline
Stroke="ColorNameOrHexadecimalValue"
Толщина контура
StrokeThickness="StrokeValue"
Цвет текста
Foreground="ColorNameOrHexadecimalValue"
Icon
Icon="IconFilePathLocation"
Размер текста
FontSize="FontSizeValue"
Тип текста
FontFamily="FontFamilyName"
Начертание шрифта
FontWeight="FontWeightValue"
Стиль текста
FontStyle="FontStyleName"
Например, можно назначить
Italic
в качестве стиля текста.Текстура
Style="Glass"
–или–
Style="Plain"
Фигура
Чтобы заменить фигуру на значок, задайте для свойства
Shape
значениеNone
, а для свойстваIcon
— путь к файлу значка.Shape="ShapeFilePathLocation"
Например:
<Nodes> <Node Id="MyNode" Background="#FF008000" Stroke="#FF000000" Foreground="#FFFFFFFF" Icon="...\Icons\Globe.png"/> </Nodes>
Применение пользовательского стиля к единичной ссылке
Откройте DGML-файл в текстовом редакторе или редакторе XML.
Найдите элемент
<Link/>
, содержащий имена исходной и целевой кодовых точек.В элементе
<Link/>
добавьте следующие атрибуты, чтобы настроить его стиль:Цвет контура и наконечника стрелки
Stroke="ColorNameOrHexadecimalValue"
Толщина контура
StrokeThickness="StrokeValue"
Стиль контура
StrokeDashArray="StrokeArrayValues"
Например:
<Links> <Link Source="MyFirstNode" Target="MySecondNode" Background="Green" Stroke="#FF000000" StrokeDashArray="2,2"/> </Links>
Применение пользовательских стилей к группе кодовых точек и связей
Откройте DGML-файл в текстовом редакторе или редакторе XML.
Если элемент
<Styles></Styles>
не существует, добавьте его под элементом<DirectedGraph></DirectedGraph>
за элементом<Links></Links>
.В элементе
<Styles></Styles>
под элементом<Style/>
и укажите следующие атрибуты:TargetType="Node
|Link | Graph"
GroupLabel="
NameInLegendBox"
ValueLabel="
NameInStylePickerBox"
Чтобы применить пользовательский стиль ко всем типам целевого объекта не следует использовать это условие.
Применение условного стиля к группам кодовых точек и связей
Откройте DGML-файл в текстовом редакторе или редакторе XML.
В элементе
<Style/>
добавьте элемент<Condition/>
, который содержит атрибутExpression
, чтобы указать выражение, возвращающее логическое значение.Например:
<Condition Expression="MyCategory"/>
–или–
<Condition Expression="MyCategory > 100"/>
–или–
<Condition Expression="HasCategory('MyCategory')"/>
Это выражение использует следующий синтаксис "Формы Бэкуса-Наура" (BNF):
<Expression> ::= <BinaryExpression> | \<UnaryExpression> | "("<Expression>")" | <MemberBindings> | <Literal> | \<Number> <BinaryExpression> ::= <Expression> <Operator> <Expression> <UnaryExpression> ::= "!" <Expression> | "+" <Expression> | "-" <Expression> <Operator> ::= "<" | "<=" | "=" | ">=" | ">" | "!=" | "or" | "and" | "+" | "*" | "/" | "-" <MemberBindings> ::= <MemberBindings> | <MemberBinding> "." <MemberBinding> <MemberBinding> ::= <MethodCall> | <PropertyGet> <MethodCall> ::= <Identifier> "(" <MethodArgs> ")" <PropertyGet> ::= <Identifier> <MethodArgs> ::= <Expression> | <Expression> "," <MethodArgs> | <empty> <Identifier> ::= [^. ]* <Literal> ::= single or double-quoted string literal <Number> ::= string of digits with optional decimal point
Можно указать несколько
<Condition/>
элементов, которые должны быть верными для применения стиля.В следующей строке после элемента
<Condition/>
добавьте один или несколько элементов<Setter/>
, чтобы указать атрибутProperty
и фиксированный атрибутValue
или вычисляемый атрибутExpression
, чтобы применить к карте, кодовым точкам или связям, удовлетворяющим условию.Например:
<Setter Property="BackGround" Value="Green"/>
Завершенным, простым примером является следующее условие, которое указывает, что кодовая точка отображается зеленым или красным цветом в зависимости от значения ее категории
Passed
—True
илиFalse
:
<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph xmlns="http://schemas.microsoft.com/vs/2009/dgml">
<Nodes>
<Node Id="MyFirstNode" Passed="True" />
<Node Id="MySecondNode" Passed="False" />
</Nodes>
<Links>
</Links>
<Styles>
<Style TargetType="Node" GroupLabel="Passed" ValueLabel="True">
<Condition Expression="Passed='True'"/>
<Setter Property="Background" Value="Green"/>
</Style>
<Style TargetType="Node" GroupLabel="Passed" ValueLabel="False">
<Condition Expression="Passed='False'"/>
<Setter Property="Background" Value="Red"/>
</Style>
</Styles>
</DirectedGraph>
В следующей таблице приведены некоторые примеры используемых условий:
Задайте размер шрифта в качестве функции количества строк кода, который также изменяет размер кодовой точки. В этом примере используется выражение с одним условием для задания нескольких свойств FontSize
и FontFamily
.
<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph xmlns="http://schemas.microsoft.com/vs/2009/dgml">
<Nodes>
<Node Id="Class1" LinesOfCode ="200" />
<Node Id="Class2" LinesOfCode ="1000" />
<Node Id="Class3" LinesOfCode ="20" />
</Nodes>
<Properties>
<Property Id="LinesOfCode" Label="LinesOfCode" Description="LinesOfCode" DataType="System.Int32" />
</Properties>
<Styles>
<Style TargetType="Node" GroupLabel="LinesOfCode" ValueLabel="Function">
<Condition Expression="LinesOfCode > 0" />
<Setter Property="FontSize" Expression="Math.Max(9,Math.Sqrt(LinesOfCode))" />
<Setter Property="FontFamily" Value="Papyrus" />
</Style>
</Styles>
</DirectedGraph>
Задайте цвет фона кодовой точки на основании свойства Coverage
. Стили выполняются в порядке их появления, аналогично операторам if-else
.
В этом примере:
Если
Coverage
значение равно > 80, задайте для свойства зеленыйBackground
цвет.Coverage
В противном случае если значение равно > 50, задайтеBackground
для свойства оттенок оранжевогоCoverage
цвета в зависимости от значения свойства.В противном случае установите для свойства
Background
оттенок красного на основании значения свойстваCoverage
.
<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph xmlns="http://schemas.microsoft.com/vs/2009/dgml">
<Nodes>
<Node Id="Class1" Coverage="58" />
<Node Id="Class2" Coverage="95" />
<Node Id="Class3" Coverage="32" />
</Nodes>
<Properties>
<Property Id="Coverage" Label="Coverage" Description="Code coverage as a percentage of blocks" DataType="Double" />
</Properties>
<Styles>
<Style TargetType="Node" GroupLabel="Coverage" ValueLabel="Good">
<Condition Expression="Coverage > 80" />
<Setter Property="Background" Value="Green" />
</Style>
<Style TargetType="Node" GroupLabel="Coverage" ValueLabel="OK">
<Condition Expression="Coverage > 50" />
<Setter Property="Background" Expression="Color.FromRgb(180 * Math.Max(1, (80 - Coverage) / 30), 180, 0)" />
</Style>
<Style TargetType="Node" GroupLabel="Coverage" ValueLabel="Bad">
<Setter Property="Background" Expression="Color.FromRgb(180, 180 * Coverage / 50, 0)" />
</Style>
</Styles>
</DirectedGraph>
Для свойства Shape
установите значение None
, чтобы значок изменил фигуру. С помощью свойства Icon
можно задать расположение значка.
<DirectedGraph xmlns="http://schemas.microsoft.com/vs/2009/dgml">
<Nodes>
<Node Id="Automation" Category="Test" Label="Automation" />
<Node Id="C# Provider" Category="Provider" Label="C# Provider" />
</Nodes>
<Categories>
<Category Id="Provider" Icon="...\Icons\Module.png" Shape="None" />
<Category Id="Test" Icon="...\Icons\Page.png" Shape="None" />
</Categories>
<Properties>
<Property Id="Icon" DataType="System.String" />
<Property Id="Label" Label="Label" Description="Displayable label of an Annotatable object" DataType="System.String" />
<Property Id="Shape" DataType="System.String" />
</Properties>
<Styles>
<Style TargetType="Node" GroupLabel="Group" ValueLabel="Has category">
<Condition Expression="HasCategory('Group')" />
<Setter Property="Background" Value="#80008080" />
</Style>
<Style TargetType="Node">
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</Styles>
</DirectedGraph>
Назначение свойств элементам кода и ссылкам
Организовать кодовые точки и связи можно, назначив им свойства. Например, можно выбрать кодовые точки с определенными свойствами, чтобы можно было сгруппировать их, скрыть или изменить их стиль.
Присвоение свойства кодовой точке
Откройте DGML-файл в текстовом редакторе или редакторе XML.
Найдите элемент
<Node/>
для этой кодовой точки. Укажите имя свойства и его значение. Например:<Nodes> <Node Id="MyNode" MyPropertyName="PropertyValue" /> </Nodes>
Добавьте элемент
<Property/>
в раздел<Properties>
, чтобы указать атрибуты, такие как видимое имя и тип данных:<Properties> <Property Id="MyPropertyName" Label="My Property" DataType="System.DataType"/> </Properties>
Присвоение свойства ссылке
Откройте DGML-файл в текстовом редакторе или редакторе XML.
Найдите элемент
<Link/>
, содержащий имена исходной и целевой кодовых точек.В элементе
<Node/>
укажите имя свойства и его значение. Например:<Links> <Link Source="MyFirstNode" Target="MySecondNode" MyPropertyName="PropertyValue" /> </Links>
Добавьте элемент
<Property/>
в раздел<Properties>
, чтобы указать атрибуты, такие как видимое имя и тип данных:<Properties> <Property Id="MyPropertyName" Label="My Property Name" DataType="System.DataType"/> </Properties>
Назначение категорий элементам кода и ссылкам
В следующих разделах описано, как можно организовать кодовые точки, присвоив им категории, и как можно создать иерархические категории, которые помогут упорядочить кодовые точки и добавить атрибуты в дочерние категории с помощью наследования.
Присвоение категории кодовой точке
Откройте DGML-файл в текстовом редакторе или редакторе XML.
Найдите элемент
<Node/>
для нужной кодовой точки.В элементе
<Node/>
добавьте атрибутCategory
, чтобы указать имя категории. Например:<Nodes> <Node Id="MyNode" Category="MyCategory" /> </Nodes>
Добавьте элемент
<Category/>
в раздел<Categories>
, чтобы можно было воспользоваться атрибутомLabel
для определения отображения текста для категории:<Categories> <Category Id="MyCategory" Label="My Category" /> </Categories>
Присвоение категории ссылке
Откройте DGML-файл в текстовом редакторе или редакторе XML.
Найдите элемент
<Link/>
, содержащий имена исходной и целевой кодовых точек.В элементе
<Link/>
добавьте атрибутCategory
, чтобы указать имя категории. Например:<Links> <Link Source="MyFirstNode" Target="MySecondNode" Category="MyCategory" </Links>
Добавьте элемент
<Category/>
в раздел<Categories>
, чтобы можно было воспользоваться атрибутомLabel
для определения отображения текста для категории:<Categories> <Category Id="MyCategory" Label="My Category" /> </Categories>
Создание иерархических категорий
Откройте DGML-файл в текстовом редакторе или редакторе XML.
Добавьте элемент
<Category/>
для родительской категории, затем добавьте атрибутBasedOn
к элементу дочерней категории<Category/>
.Например:
<Nodes> <Node Id="MyFirstNode" Label="My First Node" Category= "MyCategory" /> <Node Id="MySecondNode" Label="My Second Node" /> </Nodes> <Links> <Link Source="MyFirstNode" Target="MySecondNode" /> </Links> <Categories> <Category Id="MyCategory" Label="My Category" BasedOn="MyParentCategory"/> <Category Id="MyParentCategory" Label="My Parent Category" Background="Green"/> </Categories>
В этом примере фон
MyFirstNode
зеленый, так как его атрибутCategory
наследует атрибутBackground
MyParentCategory
.
Связывание документов или URL-адресов с элементами кода и ссылками
Чтобы связать документы или URL-адреса с кодовыми точками или связями, можно изменить DGML-файл карты и добавить атрибут Reference
в элемент <Node/>
для кодовой точки или элемент <Link/>
для связи. Затем из этой кодовой точки или связи можно открывать и просматривать содержимое. Атрибут Reference
задает путь к данному содержимому. Этот путь может относится к расположению DGML-файла или к абсолютному пути.
Внимание
При использовании относительных путей и перемещении DGML-файла в другое расположение эти пути становятся недопустимыми. При попытке открыть и просмотреть связанное содержимое отображается сообщение об ошибке, уведомляющее о том, что не удается просмотреть содержимое.
Например, может потребоваться попробовать связать следующие кодовые точки:
Чтобы описать изменения класса, можно связать URL-адрес рабочей кодовой точки, документа или другого DGML-файла с кодовой точкой для класса.
Можно связать схему зависимостей с элементом кода группы, который представляет слой в логической архитектуре программного обеспечения.
Схему компонентов можно связать с кодовой точкой интерфейса, чтобы показать больше сведений о компоненте, представляемом этим интерфейсом.
Свяжите элемент кода с рабочим элементом Или ошибкой Team Foundation Server или другими сведениями, связанными с элементом кода.
Связывание документа или URL-адреса с кодовой точкой
Откройте DGML-файл в текстовом редакторе или редакторе XML.
Найдите элемент
<Node/>
для нужной кодовой точки.Выполните одну из задач, представленных в следующей таблице:
Отдельная кодовая точка
В элементе
<Node/>
или<Link/>
добавьте атрибутReference
, чтобы указать расположение кодовой точки.Примечание.
У элемента может быть только один атрибут
Reference
.Например:
<Nodes> <Node Id="MyNode" Reference="MyDocument.txt" /> </Nodes> <Properties> <Property Id="Reference" Label="My Document" DataType="System.String" IsReference="True" /> </Properties>
Несколько кодовых точек
В элементе
<Node/>
или<Link/>
добавьте новый атрибут, чтобы указать расположение каждой ссылки.В разделе
<Properties>
:Добавьте элемент
<Property/>
для каждого нового типа ссылки.Присвойте атрибуту
Id
имя нового атрибута ссылки.IsReference
Добавьте атрибут и задайте его, чтобыTrue
ссылка отображалась в контекстном меню элемента кода Go To Reference.Label
Используйте атрибут, чтобы указать отображаемый текст в контекстном меню элемента кода Go To Reference.
Например:
<Nodes> <Node Id="MyNode" SequenceDiagram="MySequenceDiagram.sequencediagram" ActiveBugs="MyActiveBugs.wiq"/> </Nodes> <Properties> <Property Id="SequenceDiagram" Label="My Sequence Diagram" DataType="System.String" IsReference="True" /> <Property Id="ActiveBugs" Label="Active Bugs" DataType="System.String" IsReference="True" /> </Properties>
На карте имя кодовой точки отображается подчеркнутым. При открытии контекстного меню для элемента кода или ссылки вы увидите контекстное меню "Перейти к ссылке ", содержащее элементы связанного кода, которые нужно выбрать.
Воспользуйтесь атрибутом
ReferenceTemplate
, чтобы указать общую строку, такую как URL-адрес, используемую несколькими ссылками, вместо повторения этой строки в ссылке.Атрибут
ReferenceTemplate
указывает заполнитель для значения ссылки. В следующем примере заполнитель{0}
в атрибутеReferenceTemplate
будет заменен значениями атрибутовMyFirstReference
иMySecondReference
в элементе<Node/>
для получения полного пути:<Nodes> <Node Id="MyNode" MyFirstReference="MyFirstDocument" MySecondReference="MySecondDocument"/> <Node Id="MySecondNode" MyFirstReference="AnotherFirstDocument" MySecondReference="AnotherSecondDocument"/> </Nodes> <Properties> <Property Id="MyFirstReference" Label="My First Document" DataType="System.String" IsReference="True" ReferenceTemplate="http://www.Fabrikam.com/FirstDocuments/{0}.asp"/> <Property Id="MySecondReference" Label="My Second Document" DataType="System.String" IsReference="True" ReferenceTemplate=" http://www.Fabrikam.com/SecondDocuments/{0}.asp"/> </Properties>
Чтобы просмотреть кодовую точку, на которую указывает ссылка, или кодовые точки на карте, откройте контекстное меню кодовой точки или связи. Выберите "Перейти к ссылке" , а затем элемент кода.