Проверка кода по схеме слоев
Чтобы убедиться, что код не конфликтует со своей структурой, можно проверить код с помощью схем слоев в Visual Studio Ultimate и Visual Studio Premium.Это может помочь:
Найти конфликтующее между зависимостями в коде и зависимостями на схеме слоев.
Найти зависимости, на которые могут повлиять предложенные изменения.
Например, можно изменить схему слоев для отображения потенциальных изменений архитектуры, а затем проверить код, чтобы увидеть зависимости, на которые повлияли эти изменения.
Выполнить рефакторинг или миграцию кода в другую структуру.
Найти код или зависимости, выполнить определенные действия даже после перемещения кода в другую архитектуру.
Можно проверить код вручную из обозревателя схемы слоев в Visual Studio или из командной строки.Также можно проверить код автоматически, локальные или построения Team Foundation.В Видео канала 9: Разработка и проверка свою архитектуру с использованием схем слоев разделе.
Требования
Visual Studio Ultimate или Visual Studio Premium
Решения, содержащего проект моделирования со схемой слоев.Эта схема слоев необходимо связать с артефактами в проектах Visual C#, visual basic .NET или Visual Basic .NET, которые необходимо проверить.Дополнительные сведения см. в разделе Создание схем слоев из кода.
Целевой тип
В. если элемент поддерживает проверку
Включить другие сборки и проекты .NET для проверки
Проверьте код вручную
Проверьте код автоматически
Диагностика проблемы проверки слоев
Понимание и устранение ошибок проверки при помощи слоев
В. если элемент поддерживает проверку
На схеме слоев выделите один или несколько уровней, щелкните правой кнопкой мыши в выделение, а затем щелкните Просмотр ссылок.
В Обозревателе слоев просмотрите столбец Поддержка проверки.Если указано значение false, то элемент не поддерживает проверку.
Можно документы office веб-сайта, ссылки и файлы обычного текста со слоями, но процесс проверки не содержит их.Ошибки проверки не будут отображаться для ссылок на проекты или сборки, связанные с отдельными слоями при отсутствии не отображаются зависимости между слоями.Эти ссылки считаются зависимостями, только если используются в коде.
Включить другие сборки и проекты .NET для проверки
При перетаскивании элементов на схему слоев ссылки на соответствующие сборки или проекты .NET автоматически добавляются в папку Ссылки слоя в проекте моделирования.Эта папка содержит ссылки на сборки и проекты, которые анализируются во время проверки.Можно включить другие сборки и проекты .NET для проверки вручную, перетаскивая их на схему слоев.
В Обозревателе решений щелкните правой кнопкой мыши проект моделирования или папку Ссылки слоя и нажмите кнопку Добавить ссылку.
В диалоговом окне Добавление ссылки выберите сборки или проекты и нажмите кнопку ОК.
Проверьте код вручную
При наличии открытой схемы слоев, связанной с элементами решения, можно выполнить команду Проверить напрямую из схемы.Также можно использовать командную строку для выполнения команды msbuild с пользовательским свойством /p:ValidateArchitecture со значением True.Например, при внесении изменений в код, регулярно выполняйте проверку при помощи слоев, что позволит обнаруживать конфликты зависимостей заранее.
Проверка кода из открытой схемы слоев
Щелкните правой кнопкой мыши поверхность схемы и выберите пункт Проверить архитектуру.
Примечание По умолчанию свойству Действие построения в файле схемы слоев (LAYEDIAGRAM-файл) присвоено значение Проверить, т. е. схема включена в процесс проверки.
В окне Список ошибок выводятся происходящие ошибки.Дополнительные сведения об ошибках проверки см. в разделе Анализ и разрешение ошибок проверки слоев.
Чтобы просмотреть источник каждой ошибки, дважды щелкните ошибку в окне Список ошибок.
Примечание Visual Studio может вместо источника ошибки показывать граф зависимостей.Это происходит, если код имеет зависимость в сборке, не заданной схемой слоев, либо в коде отсутствует зависимость, заданная схемой слоев.Просмотрите граф зависимостей или код, чтобы определить, должна ли существовать зависимость.Дополнительные сведения о графах зависимостей см. в разделе Визуализация зависимостей кода на графах зависимостей.
Способы устранения ошибок см. в разделе Управление ошибками проверки.
Проверка кода в командной строке
Откройте командную строку Visual Studio.
Выберите один из следующих вариантов.
Чтобы проверить код на соответствие конкретному проекту моделирования в решении, запустите 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.
Создание рабочего элемента для ошибки проверки
- В окне Список ошибок щелкните правой кнопкой мыши ошибку, подведите указатель к команде Создать рабочий элемент, а затем щелкните тип рабочего элемента, который требуется создать.
Для управления ошибками проверки в окне Список ошибок воспользуйтесь следующими процедурами.
Целевой тип |
Выполните следующие действия |
---|---|
Подавить выбранные ошибки во время проверки |
Щелкните одну или несколько выбранных ошибок правой кнопкой мыши и последовательно выберите Управление ошибками проверки и Подавление ошибок. Отобразятся подавленные ошибки с форматированием в виде зачеркивания.При выполнении проверки в следующий раз эти ошибки отображаться не будут. Подавленные ошибки отслеживаются в SUPPRESSIONS-файле, относящемся к соответствующему файлу схемы слоев. |
Остановить подавление выбранных ошибок |
Щелкните выбранную подавленную ошибку или ошибки правой кнопкой мыши и последовательно выберите Управление ошибками проверки и Отменить подавление ошибок. При выполнении проверки в следующий раз выбранные подавленные ошибки будут отображаться. |
Восстановить все подавленные ошибки в окне Список ошибок. |
Щелкните правой кнопкой мыши в любом месте окна Список ошибок и последовательно выберите Управление ошибками проверки и Показать все подавленные ошибки. |
Скрыть все подавленные ошибки в окне Список ошибок. |
Щелкните правой кнопкой мыши в любом месте окна Список ошибок и последовательно выберите Управление ошибками проверки и Скрыть все подавленные ошибки. |
Проверьте код автоматически
Можно выполнять проверку при помощи слоев при каждом запуске локального построения.Если команда использует Team Foundation, можно выполнить проверку слоев в условные возвраты, которые можно задать, создав пользовательскую задачу MSBuild и использовать отчеты построения для сбора ошибок проверки. Для создания построения с условным возвратом см. раздел Определение процесса построения с условным возвратом для проверки изменений.
Автоматическая проверка кода во время локального построения
- Откройте файл проекта моделирования (.modelproj) в текстовом редакторе и включите следующее свойство.
<ValidateArchitecture>true</ValidateArchitecture>
- или -
В Обозревателе решений щелкните правой кнопкой мыши проект моделирования, который содержит схему или схемы слоев, и выберите пункт Свойства.
В окне Свойства свойству Проверка архитектуры проекта моделирования необходимо задать значение True.
Это позволяет включить проект моделирования в процесс проверки.
В Обозревателе решений щелкните файл схемы слоев (LAYERDIAGRAM-файл), который нужно использовать для проверки.
Убедитесь, что свойство схемы Действие построения в окне Свойства имеет значение Проверить.
Это позволяет включить схему слоев в процесс проверки.
Для управления ошибками проверки в окне списка ошибок см. Управление ошибками проверки.
Автоматическая проверка кода во время построения Team Foundation Build
В Командном обозревателе дважды щелкните определение построения и выберите Обработать.
В разделе Параметры процесса построения разверните блок Компиляция и в параметре Аргументы MSBuild введите следующее.
/p:ValidateArchitecture=true
Дополнительные сведения об ошибках проверки см. в разделе Анализ и разрешение ошибок проверки слоев.Дополнительные сведения о Team Foundation Build см. в разделах:
Определение процесса построения, основанного на шаблоне по умолчанию
Создание пользовательского шаблона процесса построения и работа с ним
Диагностика проблемы проверки слоев
Следующая таблица описывает проблемы проверки слоев и способы их устранения.Эти проблемы отличаются от ошибок, возникающих из-за несоответствия между кодом и структурой.Дополнительные сведения об этих ошибках см. в разделе Анализ и разрешение ошибок проверки слоев.
Проблема |
Возможная причина |
Решение |
---|---|---|
Ошибки проверки не возникают так, как это ожидается. |
Проверка не работает на схемах слоев, которые скопированы из других схем слоев в обозревателе решений и находятся в том же проекте моделирования.Скопированные таким образом схемы слоев содержат те же ссылки, что и исходная схема слоев. |
|
Понимание и разрешение ошибок проверки при помощи слоев
Во время проверки кода со схемой слоев, если структура кода конфликтует с архитектурой, будут происходить ошибки проверки.Например, ошибки проверки могут происходить по следующим причинам:
Артефакт назначен неправильному слою.В этом случае следует переместить артефакт.
Способ использования артефактом (например, классом) другого класса конфликтует с имеющейся архитектурой.В этом случае необходимо выполнить рефакторинг кода, чтобы устранить зависимость.
Для устранения этих ошибок следует обновлять код до тех пор, пока в процессе проверки не перестанут происходить ошибки.Эту процедуру можно выполнить методом итераций.
Следующий раздел описывает синтаксис, используемый в этих ошибках, объясняет значение этих ошибок и предлагает пути решения или управления ими.
Синтаксис |
Описание |
---|---|
АртефактN(Тип_артефактаN) |
АртефактN – это артефакт, связанный со слоем на диаграмме слоев. Тип_артефактаN – это тип АртефактN, например Class или Method, например: MySolution.MyProject.MyClass.MyMethod(Method) |
NamespaceNameN |
Имя пространства имен. |
LayerNameN |
Название слоя на диаграмме слоев. |
DependencyType |
Тип отношения зависимости между Артефакт1 и Артефакт2.Например, Артефакт1 связан отношением Вызовы с Артефакт2. |
Синтаксис ошибки |
Описание ошибки |
---|---|
AV0001: Недопустимая зависимость: Артефакт1(Тип_артефакта1) --> Артефакт2(Тип_артефакта2) Слои: Имя_слоя1, Имя_слоя2 | Зависимости: Тип_зависимости |
Артефакт1 в Имя_слоя1 не должен зависеть от Артефакт2 в Имя_слоя2, поскольку Имя_слоя1 не зависит непосредственно от Имя_слоя2. |
AV1001: Недопустимое пространство имен: Артефакт Слой: Имя_слоя | Требуемое пространство имен: Имя_пространства_имен1 | Текущее пространство имен: Имя_пространства_имен2 |
Артефакты, связанные с Имя_слоя, должны принадлежать Имя_пространства_имен1.Артефакт находится в Имя_пространства_имен2, а не в Имя_пространства_имен1. |
AV1002: Использование запрещенного пространства имен: Артефакт1(Тип_артефакта1) | Артефакт2(Тип_артефакта2) Слой: Имя_слоя | Запрещенное пространство имен: Имя_пространства_имен | Зависимости: Тип_зависимости |
Артефакты, связанные с Имя_слоя, не должны зависеть от Имя_пространства_имен.Артефакт1 не может зависеть от Артефакт2, поскольку Артефакт2 находится в Имя_пространства_имен. |
AV1003: Запрещенное пространство имен: Артефакт(Тип_артефакта) Слой: Имя_слоя | Запрещенное пространство имен: Имя_пространства_имен |
Артефакты, связанные с Имя_слоя, не могут принадлежать Имя_пространства_имен.Артефакт принадлежит Имя_пространства_имен. |
AV3001: Отсутствует ссылка: Слой "Имя_слоя" содержит ссылку на объект "Артефакт", который не удается найти.Отсутствует ссылка на сборку? |
Имя_слоя связано с артефактом, который не удается найти.Например, связь с классом может отсутствовать из-за отсутствия в проекте моделирования ссылки на сборку, содержащую этот класс. |
AV9001: при проверке архитектуры обнаружены внутренние ошибки.Результат может быть неполным.Для получения дополнительных сведений см. подробный журнал событий построения или окно вывода. |
Для получения дополнительных сведений см. подробный журнал событий построения или окно вывода. |