合并 SonarAnalyzer.CSharp 和 Microsoft.CodeAnalysis 规则集

Merge SonarAnalyzer.CSharp and the Microsoft.CodeAnalysis rulesets

我们运行我们公司有一个SonarQube。我们还为 Visual Studio 2019 扩展安装了 SonarLint。

如果我现在将解决方案连接到 SonarQube,则会创建一个名为“{MySolution}csharp.ruleset”的文件。里面有 5 个节点:“Managed Binary Analysis”、“Microsoft.CodeAnalysis.CSharp”、“Microsoft.CodeAnalysis.CSharp.Features”、“Microsoft.CodeAnalysis.Features”,最后是“SonarAnalyser.CSharp”。

现在使用所有这些规则集对项目进行分析。当我更改这些规则之一时,它会在我的文件中更改,但不会在 SonarQube 服务器上更改。当我更改 SonarQube 上的某些内容并从那里“重新加载”规则时,前 4 个节点的标准设置将被重置,SonarQube 中现在设置的规则位于 SonarAnalyzer.CSharp.

我的问题是:“我如何更改其中一些 Microsoft 规则并告诉 SonarQube 在公司范围内使用这些规则,而不仅仅是在我从 SonarQube 重新加载规则之前?是否可以将这些规则设置为 SonarAnalyzer 规则(合并它们)或者我们可以将这些规则设置为与正常分析分开吗?或者,最有意义的是,我们可以说 SonarQube 只实现 SonarAnalyzer.CSharp 规则集而不触及其他规则集吗?”

If I now connect a solution to the SonarQube, a file named "{MySolution}csharp.ruleset" is created. Inside are 5 nodes: "Managed Binary Analysis",...

我猜您是在 VS 中打开规则集文件并使用 VS 编辑器。 如果您使用文本编辑器打开生成的规则集文件,您会看到它只包含一个 SonarAnalyzer 规则的“节点”。

VS 编辑器显示 built-in 默认启用的规则的其他四个“节点”。当您更改任何默认设置时,VS 会将这些更改保存到 SonarLint 生成的规则集文件中。

你可以通过以下方式实现你想要的:

  1. 添加新规则集文件导入 SonarLint-generated 文件,例如
<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="Corporate ruleset" ToolsVersion="17.0">
  <!-- Assumes this file is in the same folder as the solution file -->
  <Include Path=".sonarlint\sonarlint-visualstudiocsharp.ruleset" Action="Default" />
</RuleSet>
  1. 更改您的 MSBuild 项目,使 CodeAnalysisRuleSet 属性 指向这个新的规则集文件而不是 SonarLint-generated 规则集。

现在,当您在 VS 编辑器中编辑 non-Sonar 规则的设置时,更改将保存到您的新规则集文件中。

要更改 Sonar 规则设置,您可以在 SonarQube 中修改您的质量配置文件,并告诉 SonarLint 重新生成它的规则集文件。

仅供参考 this wiki page 描述了 Visual Studio 的 SonarLint 对您的项目所做的更改,以及如何自定义它们。