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" файла:

<PropertyGroup>
  ...    
  <CodeAnalysisRuleSet>..\MyTeam.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>

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

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

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

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

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

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

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

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

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