Как отключить Roslyn Analyzers при использовании msbuild через командную строку? - PullRequest
2 голосов
/ 08 июня 2019

Анализаторы Roslyn устанавливаются как пакеты nuget, которые являются зависимостями анализаторов FxCop (также устанавливаются как пакеты nuget).

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

У меня довольно большое решение, в большинстве проектов используются анализаторы FxCop / Roslyn, а Visual Studio прекрасно работает, обычно в течение минуты.

Однако при запуске msbuild через командную строку:

"C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/MSBuild.exe" "C:\Source\MySolution\MySmartClient.sln" /p:Configuration=Develop;Platform="Any CPU" /
t:Build

Построение решения занимает от 4 до 15 минут. То же самое верно для сервера сборки, который использует ту же команду.

Я пробовал /p:RunCodeAnalysis=False, и это не имеет никакого эффекта. Я также использовал монитор процессов для эмуляции команды msbuild, которую VS отправляет в msbuild без изменений.

И, согласно этому документу: Как: включить и отключить автоматический анализ кода для управляемого кода

Флажок Включить анализ кода при сборке влияет только на статический анализ кода. Это не влияет на анализаторы кода Roslyn, которые всегда выполняются при сборке, если вы установили их как пакет NuGet.

Это чрезмерное время сборки нецелесообразно. Есть ли способ отключить при использовании msbuild через командную строку?

1 Ответ

1 голос
/ 10 июня 2019

На случай, если кто-то еще окажется здесь, я столкнулся с этой проблемой в проекте dotnet / roslyn на Github:

Добавление: переключатель MSBuild для включения / выключения анализа # 23591

В предыдущем выпуске описан обходной путь:

Заменить старые свойства MSBuild? # 1431

<PropertyGroup>
    <RunCodeAnalysis Condition="'$(RunCodeAnalysis)' == ''">true</RunCodeAnalysis>
</PropertyGroup>
<ItemGroup>
    <PackageReference Include="<whatever analyzers package you are depending on>" Condition="'$(RunCodeAnalysis)' == 'true'" />
</ItemGroup>
# You'll need to run a restore when changing this value
msbuild /p:RunCodeAnalysis=false

Хотя у меня было несколько отличий, поскольку я не использую ссылки на пакеты. Это сработало для меня.

<ItemGroup>
    <Analyzer Include="<whatever analyzers package you are depending on>" Condition="'$(RunCodeAnalysis)' == 'true'" />
</ItemGroup>

<!-- I added the condition to the EnsureNugetPackageBuildImports too. -->
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="'$(RunCodeAnalysis)' == 'true' AND !Exists('<relative path to the prop of whatever analyzers you are depending on>')" Text="$([System.String]::Format('$(ErrorText)', '<relative path to the prop of whatever analyzers you are depending on>'))" />
</Target>
...