1

我目前在让 StyleCop.Analyzers 与 SonarQube 一起工作时遇到问题。我正在使用 v6.7 的 SonarQube,并且我已经尝试过使用多个版本的 SonarC# 插件。

将自定义规则导入 SonarQube 的推荐方法似乎是使用 SonarQube Roslyn SDK 工具(https://github.com/SonarSource/sonarqube-roslyn-sdk)从 Roslyn 分析器生成插件,在这种情况下StyleCop.Analyers NuGet 包。

这似乎对包的 v1.0.0 和 v1.1.0-beta 都有效,并且两者的规则都显示在 SonarQube 中 - 但是使用最新版本的 SonarC# 将无法正确扫描项目,并且数字发现的 C# 代码行数和问题为 0。但是,如果您降级到插件的 v5.11,项目会被正确扫描,它会找到大约 2k 行代码,并且尽我所能正确显示任何 StyleCop 警告告诉。

在 VSTS 构建中,它看起来好像插件正在工作,因为 StyleCop 警告确实出现在 MSBuild 阶段(我的理解是 SonarQube 规则覆盖了构建中的任何代码分析规则),但它们根本没有显示在SonarQube 中项目页面上的摘要。

SQ Roslyn SDK 项目表示它与 v4.5 或更高版本的 C# 插件兼容 - 但它看起来并没有得到积极维护。

我在 SonarQube 日志中看不到任何错误,但在 VSTS 中的“完成 SonarQube 分析”任务中有一些警告:

2018-01-03T15:07:50.0734421Z WARNING: WARN: Protobuf file not found: null\output-cs\encoding.pb
2018-01-03T15:07:50.0734783Z WARNING: WARN: Protobuf file not found: null\output-cs\metrics.pb
2018-01-03T15:07:50.0735152Z WARNING: WARN: Protobuf file not found: null\output-cs\issues.pb
2018-01-03T15:07:50.0735516Z WARNING: WARN: Protobuf file not found: null\output-cs\token-type.pb
2018-01-03T15:07:50.0735888Z WARNING: WARN: Protobuf file not found: null\output-cs\symrefs.pb
2018-01-03T15:07:50.0736289Z WARNING: WARN: Protobuf file not found: null\output-cs\token-cpd.pb

不确定这是否是 C# 插件或 SDK 工具的问题 - 其他人有任何类似的问题吗?除了使用旧版本的 C# 插件之外,还有其他解决方法吗?

4

1 回答 1

2

SonarQube Roslyn SDK 工具仍然是将第三方 Roslyn 分析仪连接到 SonarQube 的推荐方式。最近不需要更改 SDK,因为 SonarC# 插件处理生成的插件的方式没有改变。

我刚刚尝试为 StyleCop 生成一个新插件,配置质量配置文件,将其分配给项目等,分析按预期工作并将 StyleCop 问题上传到 SonarQube。我使用的是以下版本(尽管我在本地运行分析而不是使用 VSTS):SonarQube 6.7;MSBuild v4.0.0.821 扫描仪;C#插件v6.7;风格警察 1.0

我想我可以解释为什么当您使用 SonarC# 插件 v5.11 而不是更高版本时会出现问题。v5.11 是最后一个能够自行运行 Roslyn 分析器的版本(SonarC# 插件有自己的 exe,可以打开 C# 文件、针对它们运行 Roslyn 分析器并上传问题)。此功能使 Roslyn 分析器即使在使用 MSBuild v12 时也可以使用,它不支持在构建过程中运行 Roslyn 分析器。在 SonarC# 插件 ( https://github.com/SonarSource/sonar-csharp/releases/tag/6.0.0.2033 )的 6.0 版中删除了对该功能的支持。

我的猜测是问题不在于 SDK 或 StyleCop 插件。您是否看到 SonarC# 分析器本身产生的任何问题,或任何代码指标?如果不是,那么它可能是构建的一个更普遍的问题,而不是特定于 SDK/StyleCop 的问题。

其他一些建议: * 您是否使用最新版本的 VSTS 的 SonarQube 扩展?

  • 如果您直接使用 Scanner for MSBuild 从行运行分析,它是否正常工作?

  • 尝试通过在 Begin 任务的“高级/附加设置”部分设置 /d:sonar.verbose=true 来增加 SonarQube 任务的日志级别。

  • 您描述的输出与 End step 无法找到构建期间创建的问题文件和 protobuf 文件一致。如果您使用的是非托管构建代理,您可以尝试查看由 End 任务生成的 sonar-project.properties 文件(它将位于构建的 .sonarqube\out 文件夹中)。检查该文件是否包含对 *.RoslynCA.json 文件的引用,以及这些文件是否存在并包含预期的 Roslyn 问题。该文件还应包含指向光盘上文件夹的 *.sonar.cs.analyzer.projectOutPath 条目。protobuf 文件应位于名为“output-cs”的子文件夹中。

  • 最后,您可以检查 MSBuild 输出中的警告,如https://groups.google.com/forum/#!topic/sonarqube/11YITqrltIk中所述。

于 2018-01-04T12:25:01.180 回答