【问题标题】:Configuring SonarQube to recognise C# 6.0 syntax配置 SonarQube 以识别 C# 6.0 语法
【发布时间】:2016-10-05 01:07:17
【问题描述】:

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

[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# 插件?你为什么直接和sonar-runner打交道?你为什么不使用SonarQube Scanner for MSBuild
  • 我们使用 SonarQube 4.5.6 和 3.2 版的 C# 插件。我们正在通过 TeamCity 中的构建步骤调用 SonarQube Runner,因此我引用了 sonar-runner(TeamCity 自动调用它)。
  • 我明白了。这是一个非常古老的 C# 插件(Roslyn 之前)。升级到最新(或 3.4+)版本将解决 C# 6 问题。在此处查看版本:jira.sonarsource.com/browse/SONARCS/…
  • 完美,谢谢塔马斯!如果您想将其写为答案,请在下面将其标记为正确。

标签: c# sonarqube sonar-runner c#-6.0 string-interpolation


【解决方案1】:

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

您可以查看版本历史记录here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2018-08-29
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    相关资源
    最近更新 更多