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


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

Правила анализа кода для Transact-SQL предоставляют отчет о предупреждениях касательно проектирования, именования и производительности в коде базы данных. Если встроенные правила анализа кода не включают покрытие для конкретной проблемы 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 можно включить пользовательские правила анализа кода в проект, добавив ссылку на пакет, содержащий эти правила. В следующем примере показана ссылка на пакет пользовательских правил анализа кода:

<ItemGroup>
  <PackageReference Include="Your.CustomCode.AnalysisRules" Version="1.2.3" />
</ItemGroup>

Дополнительные сведения о подключении пакета правил анализа кода в SQL-проекте в ссылках на пакеты .