Поделиться через


Настройка карт кода путем редактирования DGML-файлов

Чтобы настроить карту кода, вы можете изменить его файл языка разметки графа (DGML). Например, можно изменить элементы, чтобы указать пользовательские стили, назначить свойства и категории кодовым точкам и связям либо связать узлы с документы или URL-адреса с кодовыми точками или связями. Дополнительные сведения о элементах DGML см . в справочнике по языку разметки графов (DGML).

Измените DGML-файл карты кода в текстовом редакторе или редакторе XML. Если карта является частью решения Visual Studio, выберите ее в Обозреватель решений, откройте контекстное меню и выберите "Открыть с помощью", редактор XML (текст).

Примечание.

Чтобы создать карты кода, необходимо иметь выпуск Visual Studio Enterprise. Когда карта кода редактируется в Visual Studio, эта программа удаляет все неиспользуемые DGML-элементы и атрибуты при сохранении DGML-файла. Она также создает кодовые точки автоматически при добавлении новых связей вручную. При сохранении DGML-файла все атрибуты, добавляемые к элементу, могут самостоятельно упорядочиться в алфавитном порядке.

Элементы кода группы

Можно добавить новые группы или преобразовать существующие узлы в группу.

  1. Откройте DGML-файл в текстовом редакторе или редакторе XML.

  2. Чтобы преобразовать кодовую точку в группу, найдите элемент <Node/> для этой кодовой точки.

    - или -

    Чтобы добавить новую группу, найдите раздел <Nodes>. Добавьте новый элемент <Node/>.

  3. В элементе <Node/> добавьте атрибут Group, чтобы указать разворачивать группу при отображении или нет. Например:

    <Nodes>
       <Node Id="MyFirstGroup" Group="Expanded" />
       <Node Id="MySecondGroup" Group="Collapsed" />
    </Nodes>
    
  4. В разделе <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-файле. Чтобы изменить стиль элементов кода и ссылок, см . статью "Изменение стиля элементов кода и ссылок".

  1. Откройте DGML-файл в текстовом редакторе или редакторе XML.

  2. В элементе <DirectedGraph> добавьте следующие атрибуты, чтобы изменить его стиль:

    Цвет фона

    Background="ColorNameOrHexadecimalValue"
    

    Цвет границы

    Stroke="StrokeValue"
    

    Например:

    <DirectedGraph Background="Green" xmlns="http://schemas.microsoft.com/vs/2009/dgml" >
       ...
       ...
    </DirectedGraph>
    

Изменение стиля элементов кода и ссылок

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

  • Отдельные кодовые точки и связи

  • Группы кодовых точек и связей

  • Группы кодовых точек и связей на основании определенных условий

Совет

При наличии повторяющихся стилей в большом числе кодовых точек и связей рекомендуется применить категорию к этим кодовым точкам и связям, а затем применить стиль к этой категории. Дополнительные сведения см. в разделе "Назначение категорий элементам кода" и "Ссылки" и "Назначение свойств элементам кода" и "Ссылки".

Применение пользовательского стиля к отдельной кодовой точке
  1. Откройте DGML-файл в текстовом редакторе или редакторе XML.

  2. Найдите элемент <Node/> кодовой точки. Добавьте любой из этих атрибутов, чтобы настроить его стиль:

    Цвет фона

    Background="ColorNameOrHexadecimalValue"
    

    Границы

    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>
    
  1. Откройте DGML-файл в текстовом редакторе или редакторе XML.

  2. Найдите элемент <Link/>, содержащий имена исходной и целевой кодовых точек.

  3. В элементе <Link/> добавьте следующие атрибуты, чтобы настроить его стиль:

    Цвет контура и наконечника стрелки

    Stroke="ColorNameOrHexadecimalValue"
    

    Толщина контура

    StrokeThickness="StrokeValue"
    

    Стиль контура

    StrokeDashArray="StrokeArrayValues"
    

    Например:

    <Links>
       <Link Source="MyFirstNode" Target="MySecondNode" Background="Green" Stroke="#FF000000" StrokeDashArray="2,2"/>
    </Links>
    
  1. Откройте DGML-файл в текстовом редакторе или редакторе XML.

  2. Если элемент <Styles></Styles> не существует, добавьте его под элементом <DirectedGraph></DirectedGraph> за элементом <Links></Links>.

  3. В элементе <Styles></Styles> под элементом <Style/> и укажите следующие атрибуты:

    • TargetType="Node | Link | Graph"

    • GroupLabel="NameInLegendBox"

    • ValueLabel="NameInStylePickerBox"

      Чтобы применить пользовательский стиль ко всем типам целевого объекта не следует использовать это условие.

  1. Откройте DGML-файл в текстовом редакторе или редакторе XML.

  2. В элементе <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/> элементов, которые должны быть верными для применения стиля.

  3. В следующей строке после элемента <Condition/> добавьте один или несколько элементов <Setter/>, чтобы указать атрибут Property и фиксированный атрибут Value или вычисляемый атрибут Expression, чтобы применить к карте, кодовым точкам или связям, удовлетворяющим условию.

    Например:

    <Setter Property="BackGround" Value="Green"/>
    

    Завершенным, простым примером является следующее условие, которое указывает, что кодовая точка отображается зеленым или красным цветом в зависимости от значения ее категории PassedTrue или 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.

В этом примере:

  1. Если Coverage значение равно > 80, задайте для свойства зеленый Background цвет.

  2. Coverage В противном случае если значение равно > 50, задайте Background для свойства оттенок оранжевого Coverage цвета в зависимости от значения свойства.

  3. В противном случае установите для свойства 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>

Назначение свойств элементам кода и ссылкам

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

Присвоение свойства кодовой точке

  1. Откройте DGML-файл в текстовом редакторе или редакторе XML.

  2. Найдите элемент <Node/> для этой кодовой точки. Укажите имя свойства и его значение. Например:

    <Nodes>
       <Node Id="MyNode" MyPropertyName="PropertyValue" />
    </Nodes>
    
  3. Добавьте элемент <Property/> в раздел <Properties>, чтобы указать атрибуты, такие как видимое имя и тип данных:

    <Properties>
       <Property Id="MyPropertyName" Label="My Property" DataType="System.DataType"/>
    </Properties>
    
  1. Откройте DGML-файл в текстовом редакторе или редакторе XML.

  2. Найдите элемент <Link/>, содержащий имена исходной и целевой кодовых точек.

  3. В элементе <Node/> укажите имя свойства и его значение. Например:

    <Links>
       <Link Source="MyFirstNode" Target="MySecondNode" MyPropertyName="PropertyValue" />
    </Links>
    
  4. Добавьте элемент <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>
    
  1. Откройте DGML-файл в текстовом редакторе или редакторе XML.

  2. Найдите элемент <Link/>, содержащий имена исходной и целевой кодовых точек.

  3. В элементе <Link/> добавьте атрибут Category, чтобы указать имя категории. Например:

    <Links>
       <Link Source="MyFirstNode" Target="MySecondNode" Category="MyCategory"
    </Links>
    
  4. Добавьте элемент <Category/> в раздел <Categories>, чтобы можно было воспользоваться атрибутом Label для определения отображения текста для категории:

    <Categories>
       <Category Id="MyCategory" Label="My Category" />
    </Categories>
    

Создание иерархических категорий

  1. Откройте DGML-файл в текстовом редакторе или редакторе XML.

  2. Добавьте элемент <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 наследует атрибут BackgroundMyParentCategory.

Связывание документов или URL-адресов с элементами кода и ссылками

Чтобы связать документы или URL-адреса с кодовыми точками или связями, можно изменить DGML-файл карты и добавить атрибут Reference в элемент <Node/> для кодовой точки или элемент <Link/> для связи. Затем из этой кодовой точки или связи можно открывать и просматривать содержимое. Атрибут Reference задает путь к данному содержимому. Этот путь может относится к расположению DGML-файла или к абсолютному пути.

Внимание

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

Например, может потребоваться попробовать связать следующие кодовые точки:

  • Чтобы описать изменения класса, можно связать URL-адрес рабочей кодовой точки, документа или другого DGML-файла с кодовой точкой для класса.

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

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

  • Свяжите элемент кода с рабочим элементом Или ошибкой Team Foundation Server или другими сведениями, связанными с элементом кода.

  1. Откройте DGML-файл в текстовом редакторе или редакторе XML.

  2. Найдите элемент <Node/> для нужной кодовой точки.

  3. Выполните одну из задач, представленных в следующей таблице:

    Отдельная кодовая точка

    • В элементе <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>
    

    Несколько кодовых точек

    1. В элементе <Node/> или <Link/> добавьте новый атрибут, чтобы указать расположение каждой ссылки.

    2. В разделе <Properties>:

      1. Добавьте элемент <Property/> для каждого нового типа ссылки.

      2. Присвойте атрибуту Id имя нового атрибута ссылки.

      3. IsReference Добавьте атрибут и задайте его, чтобы True ссылка отображалась в контекстном меню элемента кода Go To Reference.

      4. 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>
    

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

  4. Воспользуйтесь атрибутом 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>
    
  5. Чтобы просмотреть кодовую точку, на которую указывает ссылка, или кодовые точки на карте, откройте контекстное меню кодовой точки или связи. Выберите "Перейти к ссылке" , а затем элемент кода.