Форум программистов, компьютерный форум, киберфорум
HF
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Миграция Settings.StyleCop

Запись от HF размещена 20.04.2021 в 13:13
Обновил(-а) HF 20.04.2021 в 22:31

Избавляемся от StyleCop настроек и устаревшего анализатора.

При билде проекта в закладке "Warning" появляется сообщение:
Цитата:
CA0507 Post-build Code Analysis (FxCopCmd.exe) has been deprecated in favor of FxCop analyzers, which run during build. Refer to https://aka.ms/fxcopanalyzers to migrate to FxCop analyzers.
Ссылка: Migrate from legacy analysis (FxCop) to source analysis (.NET analyzers)

Задача: избавиться от dll зависимостей; файла StyleCop.Settings и перевести конфигурирование анализаторов на .editorconfig.

Подготовка к миграции

Что тянет с собой StyleCop
  1. Settings.StyleCop - файл конфигурации правил
  2. набор библиотек: StyleCop.dll; StyleCop.CSharp.dll; StyleCop.CSharp.Rules.dll
    NuGet: StyleCop "Classic". Разработки прекращены в 2016 и остановилось на версии 4.7.55.0.
  3. csproj
    настройки зависимостей. Старая версия могла подключаться напрямую через указание StyleCop.Targets
    дополнительные настройки

Будущие правила
Решаете, какие правила вы будете использовать. Если ваши правила были настроены очень давно и использовались "потому что так кто-то сделал", то возможно стоит задуматься - нужны ли вам старые правила. И согласовать с командой разработки будущие изменения.
Много правил, которые раньше считались важными, сейчас многих только раздражают. Часть правил не работают, потому что доступен "сахар", а старые анализаторы воспринимали это не совсем корректно. И тому подобные причины пересмотра правил.

Миграция Settings.StyleCop в ruleset
Пример старого формата, файла Settings.StyleCop
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<StyleCopSettings Version="105">
  <GlobalSettings>
    <BooleanProperty Name="WriteCache">False</BooleanProperty>
    <StringProperty Name="MergeSettingsFiles">NoMerge</StringProperty>
    <StringProperty Name="Culture">ru-RU</StringProperty>
  </GlobalSettings>
  <Analyzers>
    <Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
      <Rules>
        <Rule Name="FieldNamesMustNotContainUnderscore">
          <RuleSettings>
            <BooleanProperty Name="Enabled">False</BooleanProperty>
          </RuleSettings>
        </Rule>        
        <Rule Name="AccessibleFieldsMustBeginWithUpperCaseLetter">
          <RuleSettings>
            <BooleanProperty Name="Enabled">False</BooleanProperty>
          </RuleSettings>
        </Rule>
        <Rule Name="NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter">
...
Здесь содержится:
  • Языковые настройки. Это используется при работе со словарём.
  • Название анализатора - атрибут AnalyzerId.
  • Название правила и его текущая настройка - Rule Name
  • и другие не важные (для меня) опции

Миграция
Спасибо "journeyman" за помощь. На ресурсе fssnip.net выложен скрипт, написанный на F#. Скрипт маппит имена правил Settings.StyleCop в коды правил Ruleset.
  1. Скачать скрипт F#
  2. Создать проект F# (или если у вас есть компиляторы F# то пользоваться этим)
  3. Скачать актуальный набор правил StyleCop - Index.hhk: ссылка
  4. Скопировать текущий "Settings.StyleCop" в исполняемую папку
  5. Скопировать текущий ruleset вашего проекта в исполняемую папку. Переименовать в "FxCop.ruleset".
    Если файла нет. Открыть редактирование и выполнить "Save as" для сохранения текущих настроек.
  6. Просто выполнить программу. Все имена захардкожены внутри.
  7. На выходе мы получаем обновлённый файл "FxCop.ruleset" c портироваными правилами из "Settings.StyleCop".
Обратите внимание на последнее сообщение. В нём может быть информация об ошибке или непортированных правилах.
В случае отстутствующих правил - можно отредактирировать скрипт чтобы отобразить название несконвертированных правил.

Миграция в .editorconfig
Есть два варианта сохранения в новый формат.
  1. Extension tool: Microsoft.CodeAnalysis.RulesetToEditorconfigConverter
  2. Visual Studio IDE

Microsoft.CodeAnalysis.RulesetToEditorconfigConverter
  • Добавляем NuGet "Microsoft.CodeAnalysis.RulesetToEditorconfigConverter"
    Можно установить куда угодно, хоть в текущий, хоть во временный. Главное найти папку куда он закэшировался.
  • Находим исполняемый файл RulesetToEditorconfigConverter.exe.
  • Копируем файл "FxCop.ruleset" (любой в вашем проекте) в исполняемую папку
  • Запускаем утилиту с указанием названия файла ruleset.
    Второй необязательной опцией - путь до ".editorconfg". Если не указано, сохранится в текущей.
  • На выходе получаем ".editorconfg"
Если у вас уже есть в проекте ".editorconfg", то нужно добавить ваши правила в текущий файл. Если конфигуратор ещё не создан, то можно использовать текущий файл.

Visual Studio
Самый простой способ это сохранить файл через Visual Studio. Но это подходит для варианта, когда у вас уже подключен ваш ruleset в проекте.
Открываем настройки "Project Properties" - "Code Analysis". Кнопка "Configure".
В верхней части, между фильтрами и правилами появится кликабельное сообщение "Migrate from ruleset to .editorconfig file. ..."

Просто кликаем на него и сохраняем ваши правила в новый ".editorconfig".
Аналигично конвертеру, правильно импортируйте правила из временного файла в существующий, если такой уже подключен в вашем проекте.

Отключаем StyleCop
Все изменения делаются в CSPROJ файле.
  • Удаляем все настройки targets
  • Удаляем все references на библиотеки
  • Удаляем все установки со словом "StyleCop". Например, флаг компиляции "StyleCopTreatErrorsAsWarnings"
  • Удаляем ссылку на файл правил. Параметр CodeAnalysisRuleSet делаем пустым
  • Отключаем анализатор для компиляции. Параметр RunCodeAnalysis делаем false, или удаляем строку.
    Отключение доступно в "Code Analysis" ввиде чекбокса "Run on build"

Подключаем StyleCop совместимый с NetAnalyzers
Основным рекомендуемым пакетом анализаторов считается "Microsoft.CodeAnalysis.NetAnalyzers".
Но раз мы хотим применить дополнительные правила проверки стиля и качества кода из StyleCop, то нужно поставить обновлённый пакет:
StyleCop.Analyzers.
Теперь коды ошибок SA**** снова применяются к проекту.

Configuring StyleCop Analyzers
Подробно о конфигурации анализатора можно прочитать в официальной документации: ссылка.
Там же можно скачать полный дефолтный ruleset файл со всеми доступными настройками: ссылка.

Ссылки
StyleCopМиграцияРазное
Миниатюры
Нажмите на изображение для увеличения
Название: NetAnalyzers-MigrationEditorConfig.png
Просмотров: 216
Размер:	36.6 Кб
ID:	6942  
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.