Любая идея, почему MSBuild внезапно начнет выполнять анализ кода на других проектах в моем решении? - PullRequest
0 голосов
/ 03 декабря 2018

Я был занят включением анализа кода для одного из наших решений.В пятницу все шло хорошо.

Я добавил в один наших файлов csproj следующее:

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <CodeAnalysisRuleSet>ca.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.6.2" />
    <PackageReference Include="StyleCop.Analyzers" Version="1.0.2" />
</ItemGroup>

И потратил некоторое время в пятницу, работая с предупреждениями, например так:

  1. Отключить все предупреждения в ca.ruleset
  2. Включить один
  3. Исправить все экземпляры
  4. Перестроить решение, чтобы проверитьИсправление
  5. GOTO 2

Это сработало очень хорошо.Я пришел этим утром и взял с того места, на котором остановился, за исключением того, что когда я перешел к шагу 4 (перестройка решения), у меня неожиданно появилось 3k + предупреждений из нашего проекта модульного тестирования.

Я не уверен, почемуанализ кода теперь применяется к этому другому проекту, и я не могу его отключить.

Некоторые наблюдения:

  • Файл csproj проекта модульного тестирования не имеет ссылок наFxCop или StyleCop.
  • Также это никак не относится к ruleset.ca
  • dotnet clean не помогает
  • Проверка другой ветви (одна без CA)включен) останавливает анализ для обоих проектов (как и ожидалось), но переключение обратно приводит к повторному анализу обоих.
  • Я использую VS Code, поэтому не могу поиграть с какими-либо настройками графического интерфейса, которые люди (в соответствии с моим поиском в Google) рекомендуют при проблемах CA
  • Мой файл .sln неПохоже, что вообще нет никакой ссылки на CA - это просто обычные определения проектов и сборок.

Я начинаю думать, что это должно быть проблемой с MSBuild.

Кто-нибудь когда-нибудь видел это раньше?Что это было за исправление?


Обновление: сообщил об ошибке с командой MSBuild.

Согласно отчету об ошибках, этоКажется, это общая вещь MSBuild и не связана с какой-либо конкретной средой.Сейчас я просто добавлю общий набор правил ignore, но вряд ли он идеален.

1 Ответ

0 голосов
/ 11 декабря 2018

Обнаружил обходной путь в моем отчете об ошибке.

Ник Герра предложил добавить PrivateAssets="All" в оператор PackageReference в файле csproj моего основного проекта.

Другими словами, для меня это:

<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.6.2" />
<PackageReference Include="StyleCop.Analyzers" Version="1.0.2" />

Стало так:

<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.6.2" PrivateAssets="All" />
<PackageReference Include="StyleCop.Analyzers" Version="1.0.2" PrivateAssets="All" />

Быстрый dotnet clean && dotnet build позже, и все эти предупреждения исчезают!


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

...