StyleCop для .NET Core и .NET Standard

ToolsStyleCop это отличное средство для контроля кода при работе в команде. Он позволяет автоматически находить стилистические ошибки. Для .NET проектов достаточно установить его и указать файл правил, используя пользовательский интерфейс. С .NET Standard и .NET Core все чуть-чуть сложнее. Давайте разберёмся как установить StyleCop и создать новый набор правил.

Коротко о StyleCop

StyleCop следит за соблюдением заданных стилистических правил в коде. Несоответствия отображаются в редакторе Visual Studio и в виде сообщений на этапе компиляции. Можно использовать как готовый набор правил, так и создать свой, в котором для каждого правила определить тип сообщения (ошибка, предупреждение и т.д.). В качестве основы можно использовать набор "Microsoft All Rules", который содержит все поддерживаемые правила.

Установка StyleCop

Существует два варианта установки: плагин для Visual Studio и NuGet пакет. Второй вариант удобнее, так как не требует отдельной настройки каждого рабочего места команды. Установку и создание правил может сделать один разработчик, а остальным достаточно просто обновить проект из репозиторя.

Для установки используйте следующую команду NuGet:

Install-Package StyleCop.Analyzers

Теперь при компиляции проекта можно увидеть примерно следующее:

1>------ Build started: Project: WebApplication2, Configuration: Debug Any CPU ------
1>Controllers\HomeController.cs(1,1,1,14): warning SA1200: Using directive must appear within a namespace declaration
1>Controllers\HomeController.cs(22,20,22,24): warning SA1101: Prefix local calls with this

Если команду устраивает набор правил по умолчанию (включены все существующие в StyleCop правила), то можно продолжать работать и начать исправлять код согласно замечаниям.

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

Создание набора правил

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

Создайте консольное приложение для .NET с названием, например, MyTeam. Откройте его свойства и прейдите в раздел "Сode Analysis". В выпадающем меню выберите набор правил "Microsoft All Rules" и нажмите кнопку "Open".

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

После того, как необходимые настройки сделаны, сохраните файл (как и любые другие файлы проекта). При этом "Microsoft All Rules" останется неизменным, а в папке проекта будет создан новый файл правил с расширением ".ruleset". В данном примере это будет MyTeam.ruleset. Этот файл необходимо перенести в папку .NET Core / .NET Standard решения.

Необходимо отметить, что в дальнейшем набор правил можно корректировать c помощью интерфейса (снова создав .NET приложение). Также правк�� можно вносить вручную, т.к. ".ruleset" по формату это XML файл. При этом описания правил можно найти на сайте MSDN. Вот, например, как выглядит файл, который отключает правило "CA1021: Avoid out parameters":

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="Rules for ConsoleApp" Description="Code analysis rules" ToolsVersion="15.0">
  <IncludeAll Action="Warning" />
  <Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
    <Rule Id="CA1021" Action="None" />
  </Rules>
</RuleSet>

Обратите внимание, что в файле содержатся только изменения относительно полного набора "Microsoft All Rules".

Подключаем .ruleset в .NET Core / .NET Standard проект

В .NET проектах выбор нужного набора правил происходит с помощью пользовательского интерфейса (там, где чуть раньше выбрали "Microsoft All Rules").

В .NET Core / .NET Standard это необходимо сделать вручную. Для этого откройте файл проекта (.csproj) и в существующий или новый блок <PropertyGroup> добавьте блок <CodeAnalysisRuleSet> с указанием необходимого ".ruleset" файла:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    ...
    <CodeAnalysisRuleSet>..\MyTeam.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>
  ...
</Project>

Путь до файла ".ruleset" задается относительно файла проекта.

Сохраните проект и новые правила вступят в силу.

Дополнительная настройка StyleCop

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

Для этого необходимо:

  • Добавить файл stylecop.json в проект.
  • В свойствах этого файла указать "Build Action". В зависимости от типа проекта это может быть
    • AdditionalFiles
    • или C# analyzer additional file

Полный список доступных настроек и их параметров доступен на сайте StyleCop на GitHub.

В ранних версиях StyleCop настройки хранились в файле Settings.StyleCop, который теперь не поддерживается. Поэтому при миграции старых проектов необходимо переписать настройки из Settings.StyleCop в stylecop.json

Добавить комментарий