StyleCop 的 SonarQube 插件生成器不适用于 SonarC# v6 及更高版本

SonarQube plugin generator for StyleCop not working with SonarC# v6 onwards

我目前在 StyleCop.Analyzers 使用 SonarQube 时遇到问题。我使用的是 SonarQube 的 v6.7,我已经用多个版本的 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 的 "Complete SonarQube analysis" 任务中有一些警告:

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# 插件之外,还有其他解决方法吗?

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 时也可以使用,它不支持 运行ning 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 从行中进行分析,它是否可以正常工作?

  • 尝试通过在开始任务的 "Advanced/Additional Settings" 部分中设置 /d:sonar.verbose=true 来提高 SonarQube 任务的日志级别。

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

  • 的子文件夹中
  • 最后,您可以按照 https://groups.google.com/forum/#!topic/sonarqube/11YITqrltIk.

  • 中所述检查 MSBuild 输出中的警告