C# 文件失败的 SonarQube 分析:对文件中不存在的行号的引用

Posted

技术标签:

【中文标题】C# 文件失败的 SonarQube 分析:对文件中不存在的行号的引用【英文标题】:SonarQube analysis of C# file failing: References to a line number not present in the file 【发布时间】:2018-04-16 10:42:16 【问题描述】:

在通过 GitLab 的 CI 系统运行 sonarqube 分析时,在 SonarQube 扫描过程的最后发生了一个有趣的故障:

发生此过程的 Gitlab 从机具有以下配置:

操作系统:Windows Server 12 R2(64 位) 适用于 MSBuild 版本的声纳扫描仪:3.0.1.635 MSBuild 版本:15(使用 Visual Studio 2017) SonarC# 版本:6.1.0.2359

使用的SonarQube服务器版本是6.4

Sonar 扫描仪似乎仍在引用文件的旧版本,该文件的行数比新版本多。早些时候,我通过删除 Gitlab runner 中建立的缓存解决了这个问题,但这一次,删除缓存没有任何效果。谷歌搜索这个错误并没有让我到任何地方(或者我的谷歌 Fu 很弱)。这似乎只是这个特定项目的问题,因为对其他 dotnet 核心项目的 SonarQube 分析在同一系统上运行良好。

任何指针/帮助/解释将不胜感激。

编辑:此问题是由文件编码(带有 BOM 的 UTF-8)引起的。将编码更改为 UTF-8 后,错误消失了。非常感谢 SonarSource 团队的 Valeri 为 pointing 提供了帮助

【问题讨论】:

请edit您的问题包括SonarQube实例上安装的SonarC#版本(管理>系统>更新中心) 这通常发生在您项目中的文件之一的编码“意外”时。最新版本的 SonarC# 应在日志中打印文件名。最好使用 UTF8 无 BOM 编码。 @Valeri-SonarSourceTeam:这行得通。该文件具有带有BOM编码的UTF-8,将其更改为UTF-8后,错误消失了。非常感谢!这是否包含在某处的官方文档中?或者你能在这里回答这个问题,以便我可以将其标记为这个问题的答案吗? 【参考方案1】:

当您项目中的一个或多个文件的编码对 SonarQube 来说“意外”时,通常会发生此错误。最新版本的 SonarC# 将打印破坏分析的文件的名称,您可以使用不同的编码保存它,通常没有 BOM 的 UTF8 效果最好。

这个问题比较少见,但我认为你是对的,它应该在我们的文档中占有一席之地。我将创建一个页面并使用链接更新答案。

【讨论】:

以上是关于C# 文件失败的 SonarQube 分析:对文件中不存在的行号的引用的主要内容,如果未能解决你的问题,请参考以下文章

C# 的 Sonarqube 5.4 自定义规则

SonarQube 扫描仪因线路超出范围而失败

分析失败并出现错误“没有对此项目执行 FxCop 分析,而它包含 cs 文件”

SonarQube 7.1 和 TFS 2018 发布质量门结果失败

SonarQube 和 Lcov 报告无法解析文件路径

OSX 上的 SonarQube Xamarin 分析