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


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

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

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

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

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

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

  • Рефакторинг или перенос кода в другую структуру.

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

Требования

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

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

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

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

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

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

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

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

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

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

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

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

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

Откройте файл проекта моделирования (MODELPROJ) с помощью текстового редактора, а затем добавьте следующее свойство:

<ValidateArchitecture>true</ValidateArchitecture>

- или -

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

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

    Сюда входит проект моделирования в процессе проверки.

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

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

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

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

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

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

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

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

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

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

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

  • Артефакт, например класс, использует другой класс таким образом, что конфликтует с архитектурой. Рефакторизовать код для удаления зависимости.

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

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

Syntax Описание
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: анализ архитектуры обнаружил внутренние ошибки Результаты могут быть неполными. Дополнительные сведения см. в подробном журнале событий сборки или окне вывода.