Общие сведения о расширяемости правил анализа кода

Предоставленные правила анализа кода содержат предупреждения о проектировании, именовании и производительности в коде базы данных. Если встроенные правила анализа кода не включают покрытие для конкретной проблемы T-SQL или антипаттерна, которую вы хотите автоматически обнаружить, можно создать пользовательские правила анализа кода базы данных.

Например, может потребоваться создать пользовательское правило, которое избегает использования инструкции WAITFOR DELAY, как показано в правилах анализа пользовательского кода. Для создания настраиваемых правил анализа кода базы данных используются классы в пространстве имен CodeAnalysis.

В этом обзоре рассматривается базовая архитектура различных компонентов правил анализа кода базы данных.

Компоненты правил анализа кода базы данных

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

Снимок экрана: поток обработки кода базы данных.

При использовании функции правил анализа кода базы данных все правила загружаются и используются в соответствии с тем, как они настроены в проекте. Дополнительные сведения см. в статье How to: Enable and Disable Specific Rules for Static Analysis of Database Code (Практическое руководство. Включение и отключение определенных правил для статического анализа кода базы данных). Диспетчер расширений также загружает все пользовательские сборки правил, созданные и зарегистрированные.

Класс для настраиваемого правила анализа кода наследуется от SqlCodeAnalysisRule. Пользовательский класс правил может получить доступ к полезным объектам через контекст выполнения правила. К этим объектам относятся:

  • Метаданные о самом правиле.
  • Схема Dac.Model.TSqlModel базы данных, включая все элементы модели, связи между этими и любыми свойствами элементов.
  • Для правил, которые проверяют определенные элементы Dac.Model.TSqlObject , представляющие этот элемент схемы в модели, включается в контекст.
  • Многие объекты схемы также имеют представление ScriptDom , к которому можно получить доступ с помощью этого контекста. Это представление элемента на основе AST, которое может быть полезно при попытке увидеть потенциальные проблемы синтаксиса, такие как наличие SelectStarExpression.

Для любых проблем, обнаруженных правилом, Dac.CodeAnalysis.SqlRuleProblem создается объект. При создании этого SqlRuleProblem объекта соответствующий Dac.Model.TSqlObject и, возможно , элемент представления ScriptDom передаются в конструктор, и они используются для определения расположения проблемы в файлах исходного кода. В конце анализа все эти проблемы передаются в диспетчер ошибок и отображаются в списке ошибок.

Включение пользовательских правил в проект SQL

При использовании проектов SQL в стиле ПАКЕТА SDK для Microsoft.Build.Sql в проекте можно включить правила пользовательского анализа кода, добавив ссылку на пакет, содержащую правила.