Как отключить все анализаторы кода 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
Вы можете отключить отдельные анализаторы или целые пакеты анализаторов.
Это создает <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.
Можно сослаться на файл набора правил, расположенный в родительской папке
<Project ...>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<CodeAnalysisRuleSet>..\Example.ruleset</CodeAnalysisRuleSet>
Таким образом, вы можете определить один набор правил для всего решения.
Можно разместить
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>