配置 SonarQube 以识别 C# 6.0 语法

Configuring SonarQube to recognise C# 6.0 syntax

我正在将我们的 TeamCity 构建设置为 运行 我们的 C# 解决方案的 SonarQube 分析。通过使用 -Dsonar.sourceEncoding=UTF-8 让 Sonar 识别文件中的 utf-8 BOM header,我已经克服了一个障碍。我当前的问题与 C# 6.0 语法有关,例如字符串插值,Sonar 似乎无法识别它并给我 "parse errors":

[09:38:39][Step 4/6] 04:38:39.338 ERROR - Unable to parse file: C:\BuildAgent\work\.........\DataLayerTests.cs
[09:38:39][Step 4/6] 04:38:39.338 ERROR - Parse error at line 44 column 46:
[09:38:39][Step 4/6] 
[09:38:39][Step 4/6]    43:             Assert.IsNotNull(results, "The method returned NULL instead of any results.");
[09:38:39][Step 4/6]   -->              Assert.AreEqual(1, results.Count, $"The method returned {results.Count} results instead of 1.");

是否有任何额外的命令行参数需要与 sonar-runner 一起使用以确保兼容性?还是跟我们使用的C#插件版本有关?

我发现了这个 other 问题,它只是切线相关。这个问题是关于使 Roslyn 分析器发现的问题能够回流到 SonarQube。我的问题比这更基本,因为我还没有达到 Sonar 完全理解我的语法的阶段!

C# 插件已在 3.4 版中重写以在内部使用 Roslyn。因此,任何更高版本都将处理(解析)C# 6 功能。另外,我建议更新到最新版本,因为我们会不断添加新规则并修复已知问题。

您可以查看版本历史here