Как отключить все анализаторы кода Roslyn?

Я пытаюсь работать с большим проектом с открытым исходным кодом, в котором есть несколько анализаторов кода Roslyn. Когда я открываю решение, Visual Studio использует ~35% ЦП в течение 15 минут. Используя PerfView, я выяснил, что анализаторы кода, запускаемые в решении, тормозят работу Visual Studio.

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

Мои вопросы):

  • Могу ли я отключить все анализаторы Roslyn для данного решения, чтобы избежать этого?
  • Можно ли отключить все анализаторы Roslyn для всех решений в Visual Studio?

10 ответов

Решение

Пытаться Tools/Options/Text Editor/C#/Advanced и отключить полный анализ решения. Это доступно только с VS2015 Обновление 2.

Вы можете отключить анализаторы для каждого проекта.

Чтобы сделать это, щелкните правой кнопкой мыши Project>References>Analyzers в Solution Explorer и нажмите Open Active Rule Set

снимок экрана с расположением Open Active Rule Set

Вы можете отключить отдельные анализаторы или целые пакеты анализаторов.

флажки для отключения анализаторов

Это создает <ProjectName>.ruleset файл и изменяет <ProjectName>.csprojЭто означает, что вы поделитесь этой конфигурацией со своей командой, если не исключите эти изменения из системы контроля версий.

Примечание. Изменения вступают в силу после закрытия и повторного открытия решения.


Изменения в .csproj:

<Project ...>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <CodeAnalysisRuleSet>Example.ruleset</CodeAnalysisRuleSet>

Example.ruleset файл:

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="Rules for WpfApplication1" Description="Code analysis rules for WpfApplication1.csproj." ToolsVersion="14.0">
  <Rules AnalyzerId="Microsoft.CodeAnalysis.CSharp" RuleNamespace="Microsoft.CodeAnalysis.CSharp">
    <Rule Id="AD0001" Action="None" />
    <Rule Id="CS0028" Action="None" />
...

Попробуйте выполнить комбинацию из следующего в файлах csproj или Directory.Build.props

<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
<RunAnalyzersDuringLiveAnalysis>false</RunAnalyzersDuringLiveAnalysis>
<RunAnalyzers>false</RunAnalyzers>

https://docs.microsoft.com/en-us/visualstudio/code-quality/disable-code-analysis?view=vs-2019

Отключите настройку ниже в Инструменты / Параметры / Текстовый редактор / C# / Advanced и отключите использование 64-битного процесса для анализа кода в группе анализа. он был протестирован в vs2019.

введите описание изображения здесь

Начиная с Visual Studio 2022: Инструменты > Параметры > Текстовый редактор > C# > Дополнительно

Можно сослаться на файл набора правил, расположенный в родительской папке

<Project ...>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <CodeAnalysisRuleSet>..\Example.ruleset</CodeAnalysisRuleSet>

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

Можно разместить файл в папку, для которой (и ее подпапок) нужно отключить все предупреждения анализатора .NET:

      root = true

[*.cs]

# Disable all .NET analyzers
dotnet_analyzer_diagnostic.severity = none
dotnet_diagnostic.severity = none 

Это полезно, если у вас есть копия внешней библиотеки в кодовой базе, и вы не хотите изменять ее исходный код.

В Visual Studio 2022 я решил отключить эти две проверки:

  • включить диагностику «pull» (экспериментальная, требуется перезагрузка)
  • Запустить анализ кода в отдельном процессе (требуется перезагрузка)

До того, как Roslyn съел много оперативной памяти, после этого визуальная студия работала хорошо.

Для Visual Studio 2019,

Щелкните Инструменты> Параметры.

Параметры> Текстовый редактор> Дополнительно>

Снимите флажок "Использовать 64-битный процесс для анализа кода".

Вам необходимо перезапустить VS, чтобы это вступило в силу

Также можно условно ссылаться на отдельный пакет анализатора, как в разделе « Условное включение пакета NuGet» , «Условие PackageReference игнорируется» , « Условная ссылка на пакет в проекте UWP».

поэтому просто включите какой-нибудь анализатор, когда для конфигурации сборки установлено значениеDebug(или любой другой, который вы можете создать самостоятельно) и продолжите кодирование подReleaseконфигурация без этих анализаторов:

          <Choose>
        <When Condition="'$(Configuration)' == 'Debug'">
            <ItemGroup>
                <PackageReference Include="..." Version="..." ExcludeAssets="compile" />
            </ItemGroup>
        </When>
    </Choose>

И этоExcludeAssets="compile"это то же самое, что :

      <PackageReference Include="..." Version="...">
    <PrivateAssets>all</PrivateAssets>
    <IncludeAssets>runtime;build;native;contentfiles;analyzers;...</IncludeAssets>
</PackageReference>
Другие вопросы по тегам