我正在尝试与一个拥有一些 Roslyn 代码分析器的大型开源项目合作。当我打开解决方案时,Visual Studio 使用约 35% 的 CPU 大约 15 分钟。使用 PerfView,我发现解决方案上运行的代码分析器使 Visual Studio 陷入困境。
我知道可以在每个项目的基础上禁用分析器,但该解决方案包含 100 多个项目,所以我不想逐一执行此操作。
我的问题:
您可以针对每个项目禁用分析器。
为此,请右键单击 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" />
...
尝试
Tools/Options/Text Editor/C#/Advanced
并禁用完整解决方案分析。它仅自 VS2015 Update 2 起可用。
在 csproj 或 Directory.Build.props 文件中尝试以下组合
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
<RunAnalyzersDuringLiveAnalysis>false</RunAnalyzersDuringLiveAnalysis>
<RunAnalyzers>false</RunAnalyzers>
可以引用位于父文件夹中的规则集文件
<Project ...>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<CodeAnalysisRuleSet>..\Example.ruleset</CodeAnalysisRuleSet>
这样您就可以为整个解决方案定义一个规则集。
可以将
.editorconfig
文件放置到想要关闭所有 .NET 分析器警告的文件夹(及其子文件夹)中:
root = true
[*.cs]
# Disable all .NET analyzers
dotnet_analyzer_diagnostic.severity = none
dotnet_diagnostic.severity = none
如果代码库中有外部库副本并且不想修改其源代码,这非常有用。
还可以有条件地引用独立分析器包,如有条件地包含 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>