如何禁用所有 Roslyn 代码分析器?

问题描述 投票:0回答:9

我正在尝试与一个拥有一些 Roslyn 代码分析器的大型开源项目合作。当我打开解决方案时,Visual Studio 使用约 35% 的 CPU 大约 15 分钟。使用 PerfView,我发现解决方案上运行的代码分析器使 Visual Studio 陷入困境。

我知道可以在每个项目的基础上禁用分析器,但该解决方案包含 100 多个项目,所以我不想逐一执行此操作。

我的问题:

  • 我可以禁用给定解决方案的所有 Roslyn 分析器来避免这种情况吗?
  • 我可以在 Visual Studio 中禁用所有解决方案的所有 Roslyn 分析器吗?
c# visual-studio visual-studio-2015 roslyn analyzer
9个回答
28
投票

您可以针对每个项目禁用分析器。

为此,请右键单击 Solution Explorer 中的 Project>References>Analyzers,然后点击 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" />
...

13
投票

尝试

Tools/Options/Text Editor/C#/Advanced
并禁用完整解决方案分析。它仅自 VS2015 Update 2 起可用。


13
投票

在 csproj 或 Directory.Build.props 文件中尝试以下组合

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

https://learn.microsoft.com/en-us/visualstudio/code-quality/disable-code-analysis?view=vs-2019#net-framework-projects


10
投票

在工具/选项/文本编辑器/C#/高级中禁用以下设置,并在分析组下禁用使用64位进程进行代码分析。在vs2019中测试过。


8
投票

自 Visual Studio 2022 起: 工具 > 选项 > 文本编辑器 > C# > 高级


6
投票

可以引用位于父文件夹中的规则集文件

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

这样您就可以为整个解决方案定义一个规则集。


5
投票

可以将

.editorconfig
文件放置到想要关闭所有 .NET 分析器警告的文件夹(及其子文件夹)中:

root = true

[*.cs]

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

如果代码库中有外部库副本并且不想修改其源代码,这非常有用。


5
投票

在 Visual Studio 2022 中,我已解决并禁用这两项检查:

  • 启用“拉动”诊断(实验性,需要重新启动)
  • 在单独的进程中运行代码分析(需要重新启动)

在 Roslyn 吃了很多内存之前,之后视觉工作室工作得很好。


0
投票

还可以有条件地引用独立分析器包,如有条件地包含 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>
    
© www.soinside.com 2019 - 2024. All rights reserved.