GlobalSuppressions игнорируются из StyleCop при запуске «сборки dotnet», наводит CI с сообщениями об ошибках до того момента, когда он завершается - PullRequest
0 голосов
/ 30 октября 2019

Мои юнит-тесты проходят через TravisCI. Когда дело доходит до шага dotnet build, консоль наводняется множеством ошибок, и сборка прекращается.

Все это началось, когда я переместил свой GlobalSuppressions.cs в папку решения верхнего уровня, как я хотелприменить StyleCop ко всем проектам вместо одного и не копировать / вставлять файл во все из них.

Для этого я использовал Directory.build.props следующим образом

<Project>
  <PropertyGroup>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
  </PropertyGroup>

    <ItemGroup>
    <Compile Include="$(SolutionDir)GlobalSuppressions.cs" />
    <PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
  </ItemGroup>
</Project>

ВВ любой IDE (например, Rider, Visual Studio 2019) я не получу предупреждений в проекте, и GlobalSuppressions.cs корректно применяется ко всем моим проектам.

Когда я выполняю dotnet build в любой ОС, этокажется, не знает, что GlobalSuppressions.cs больше существует, и наводняет его ошибками.

Как мне заставить dotnet build принять GlobalSuppressions.cs при сборке? Я понятия не имею, почему он прекрасно работает с любым разработчиком при компиляции через некоторую IDE, но не работает из командной строки.

1 Ответ

0 голосов
/ 01 ноября 2019

Мне пришлось принять другой подход к решению этой проблемы. Я сделал следующее:

1) Удалено GlobalSuppressions.cs (или, скорее, вырежьте его из проекта, но храните файл в другом месте, чтобы у меня были ссылки)

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

<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
 </PackageReference>

3) Создайте новый файл в каталоге решений с именем Rules.ruleset (или любое другое имя, которое вы хотите), а затемвручную установите правила в этом файле из вашего старого GlobalSuppressions.cs

4) Используйте Directory.Build.props со следующим содержимым, чтобы оно применялось к каждому проекту (обратите внимание, как здесь применяется материал из (2)),При предупреждении я устанавливаю ошибку, но вы, очевидно, можете удалить ее, если хотите

<Project>
  <PropertyGroup>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <CodeAnalysisRuleSet>$(SolutionDir)Rules.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
  </ItemGroup>
</Project>

5) Самое главное , убедитесь, что все пустые <CodeAnalysisRuleSet></CodeAnalysisRuleSet> или <CodeAnalysisRuleSet /> осталисьв любом из ваших файлов проекта. Если они присутствуют, во время написания он испортит анализ кода и будет предполагать, что все по умолчанию включено (что вы почти наверняка не хотите). Достаточно вырезать их из файла .csproj

После выполнения вышеизложенного все мои проекты теперь используют новейший анализ .NET StyleCop, и он автоматически применяется ко всем проектам в моем решении.

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

РЕДАКТИРОВАТЬ: Обратите внимание, что VS может бытьболь и начинает вставлять <CodeAnalysisRuleSet /> без причины даже при наличии Directory.Build.props. Я не уверен, почему это происходит или что это вызывает, но иногда мне приходится его удалять. Возможно, мне придется изменить его так, чтобы <CodeAnalysisRuleSet>$(SolutionDir)Rules.ruleset</CodeAnalysisRuleSet> устанавливался вручную в каждом файле .csproj, если он продолжает это делать. Посмотрим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...