Проверка кода по схемам зависимостей

Зачем использовать схемы зависимостей?

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

  • Найдите конфликты между зависимостями в коде и зависимостями на схеме зависимостей.

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

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

  • Выполнить рефакторинг или миграцию кода в другую структуру.

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

Requirements

  • Visual Studio

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

  • Решение с проектом моделирования с схемой зависимостей. Эта схема зависимостей должна быть связана с артефактами в проектах C# или Visual Basic, которые необходимо проверить. См. статью "Создание схем зависимостей" из кода.

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

Код можно проверить вручную из открытой схемы зависимостей в Visual Studio или из командной строки. Вы также можете автоматически проверять код при выполнении локальных сборок или сборок Azure Pipelines.

Важно!

Если вы хотите выполнить проверку уровня с помощью Team Foundation Server (TFS), необходимо также установить ту же версию Visual Studio на сервере сборки.

Проверка зависимостей в реальном времени

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

  • Динамическая проверка поддерживается для C# и Visual Basic.

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

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

  • При обновлении проекта для динамической проверки зависимостей версия пакета NuGet обновляется так, чтобы она была одинаковой для всех проектов и является самой высокой версией.

  • Добавление нового проекта проверки зависимостей активирует обновление проекта.

Определение, поддерживает ли элемент проверку

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

  1. На схеме зависимостей выберите один или несколько слоев, щелкните правой кнопкой мыши выбранный элемент и щелкните "Просмотреть ссылки".

  2. В Обозреватель уровня просмотрите столбец "Поддержка проверки". Если значение равно false, элемент не поддерживает проверку.

Включение других сборок и проектов .NET для проверки

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

  1. В Обозреватель решений щелкните правой кнопкой мыши проект моделирования или папку "Ссылки на слой", а затем нажмите кнопку "Добавить ссылку".

  2. В диалоговом окне "Добавить ссылку" выберите сборки или проекты и нажмите кнопку "ОК".

Проверка кода вручную

Если у вас есть открытая схема зависимостей, связанная с элементами решения, можно выполнить команду "Проверить ярлык" на схеме. Можно также использовать командную строку для выполнения команды msbuild с помощью настраиваемого свойства /p:ValidateArchitecture с значением True. Например, при внесении изменений в код регулярно выполняйте проверку слоев, чтобы заранее обнаруживать конфликты зависимостей.

Проверка кода из открытой схемы зависимостей

  1. Щелкните правой кнопкой мыши область схемы и щелкните " Проверить архитектуру".

    Примечание.

    По умолчанию свойству действия сборки в файле схемы зависимостей (.layerdiagram) задано значение Validate , чтобы схема была включена в процесс проверки.

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

  2. Чтобы просмотреть источник каждой ошибки, дважды щелкните ошибку в окне списка ошибок.

    Примечание.

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

  3. Сведения об управлении ошибками см. в разделе "Устранение ошибок проверки слоя".

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

  1. Откройте командную строку Visual Studio.

  2. Выберите одно из следующего:

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

      msbuild <FilePath+ModelProjectFileName>.modelproj /p:ValidateArchitecture=true
      
      • или-

        Перейдите к папке, содержащей файл проекта моделирования (MODELPROJ) и схему зависимостей, а затем запустите MSBuild со следующим пользовательским свойством:

        msbuild /p:ValidateArchitecture=true
        
    • Чтобы проверить код для всех проектов моделирования в решении, запустите MSBuild со следующим настраиваемым свойством:

      msbuild <FilePath+SolutionName>.sln /p:ValidateArchitecture=true
      
      • или-

        Перейдите к папке решения, которая должна содержать проект моделирования, содержащий схему зависимостей, а затем запустите MSBuild со следующим пользовательским свойством:

        msbuild /p:ValidateArchitecture=true
        

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

    Дополнительные сведения об ошибках проверки см. в разделе "Устранение неполадок с проверкой слоя".

Управление ошибками проверки

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

Предупреждение

Вы должны быть уже подключены к управлению исходным кодом (SCC) TFS для создания рабочего элемента или связи с ним. При попытке открыть соединение с другим SCC TFS Visual Studio автоматически закрывает текущее решение. Убедитесь, что вы уже подключены соответствующему SCC, перед попыткой создания рабочего элемента или связи с ним. В последних выпусках Visual Studio команды меню недоступны, если вы не подключены к SCC.

Создание рабочего элемента для ошибки проверки

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

Используйте эти задачи для управления ошибками проверки в окне списка ошибок:

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

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

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

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

Автоматическая проверка кода

Проверку слоев можно выполнять при каждом выполнении локальной сборки. Если команда использует Azure DevOps, можно выполнить проверку уровня с помощью шлюзовых проверка-ins, которые можно указать, создав настраиваемую задачу MSBuild, и использовать отчеты сборки для сбора ошибок проверки. Сведения о создании воротных проверка сборки см. в статье TFVC, встраиваемой проверка.

Автоматическая проверка кода во время локальной сборки

Откройте файл проекта моделирования (.modelproj) в текстовом редакторе и включите следующее свойство.

<ValidateArchitecture>true</ValidateArchitecture>

- или -

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

  2. В окне "Свойства" задайте для свойства проверки архитектуры проекта моделирования значение True.

    Это позволяет включить проект моделирования в процесс проверки.

  3. В Обозреватель решений щелкните файл схемы зависимостей (.layerdiagram), который требуется использовать для проверки.

  4. В окне "Свойства" убедитесь, что для свойства действия сборки схемы задано значение Validate.

    Это включает схему зависимостей в процессе проверки.

Сведения об управлении ошибками в окне списка ошибок см. в разделе "Устранение ошибок проверки слоя".

Устранение неполадок проверки слоев

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

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

Скопируйте элементы из схемы зависимостей источника на новую схему.

Устранение ошибок проверки слоя

При проверке кода на схеме зависимостей ошибки проверки возникают при конфликте кода с проектом. Например, ошибки проверки могут происходить по следующим причинам:

  • Артефакт назначен неправильному слою. В этом случае следует переместить артефакт.

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

Для устранения этих ошибок следует обновлять код до тех пор, пока в процессе проверки не перестанут происходить ошибки. Эту процедуру можно выполнить методом итераций.

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

Синтаксис Description
ArtifactN(ArtifactTypeN) ArtifactN — это артефакт, связанный с слоем на схеме зависимостей.

ArtifactTypeN — это тип ArtifactN, например класс или метод, например:

MySolution.MyProject.MyClass.MyMethod(Method)
NamespaceNameN Имя пространства имен.
LayerNameN Имя слоя на схеме зависимостей.
DependencyType Тип связи зависимостей между Artifact1 и Artifact2. Например, Artifact1 имеет связь "Вызовы" с Artifact2.
Синтаксис ошибки Описание ошибки
DV0001: недопустимая зависимость Эта проблема возникает, когда элемент кода (пространство имен, тип, член), сопоставленный с слоем, ссылается на элемент кода, сопоставленный с другим слоем, но между этими слоями в схеме проверки зависимостей, содержащей эти слои, нет стрелки зависимостей. Это нарушение ограничения зависимостей.
DV1001: недопустимое имя пространства имен Эта проблема отображается в элементе кода, связанном с слоем, в котором свойство "Разрешенные имена пространств имен" не содержит пространства имен, в котором определен этот элемент кода. Это нарушение ограничения именования. Обратите внимание, что синтаксис "Разрешенные имена пространств имен" — это список пространств имен с запятой, в которых элементы кода, связанные с ними, могут быть определены на уровне.
DV1002: зависимость от неуправляемого пространства имен Эта проблема сообщается об элементе кода, связанном с слоем, и ссылается на другой элемент кода, определенный в пространстве имен, определенном в свойстве unreferenceable Namespace слоя. Это нарушение ограничения именования. Обратите внимание, что свойство Unreferenceable Namespaces определяется как разделенный точкой с запятой список пространств имен, на которые не следует ссылаться в элементах кода, связанных с этим слоем.
DV1003: запрещенное имя пространства имен Эта проблема отображается в элементе кода, связанном с слоем, в котором свойство "Запрещено имена пространств имен" содержит пространство имен, в котором определен этот элемент кода. Это нарушение ограничения именования. Обратите внимание, что свойство "Запрещенное имя пространства имен" определяется как разделенный точкой с запятой список пространств имен, в которых элементы кода, связанные с этим слоем, не должны быть определены.
DV2001: наличие схемы слоев Эта проблема сообщается в проекте, который не содержит файл схемы зависимостей, но ссылается на анализаторы проверки зависимостей. Если проверка зависимостей не использовалась, можно удалить "Microsoft.DependencyValidation.Analyzers" непосредственно из Обозреватель решений или отключить это предупреждение. Чтобы добавить схему зависимостей, см. статью "Создание схем зависимостей" из кода.
DV2002: базовые типы без сопоставления Эта проблема возникает, когда элемент кода не сопоставляется с любым слоем.
DV3001: отсутствует ссылка Ссылки "LayerName" на "Артефакт", которые не удается найти. Отсутствует ссылка на сборку?
DV9001: анализ архитектуры обнаружил внутренние ошибки Результат может быть неполным. Для получения дополнительных сведений см. подробный журнал событий построения или окно вывода.