StyleCop的SonarQube插件生成器无法与SonarC#v6一起使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了StyleCop的SonarQube插件生成器无法与SonarC#v6一起使用相关的知识,希望对你有一定的参考价值。

我目前在让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中的“完整SonarQube分析”任务中有一些警告:

2018-01-03T15:07:50.0734421Z WARNING: WARN: Protobuf file not found: nulloutput-csencoding.pb
2018-01-03T15:07:50.0734783Z WARNING: WARN: Protobuf file not found: nulloutput-csmetrics.pb
2018-01-03T15:07:50.0735152Z WARNING: WARN: Protobuf file not found: nulloutput-csissues.pb
2018-01-03T15:07:50.0735516Z WARNING: WARN: Protobuf file not found: nulloutput-cs	oken-type.pb
2018-01-03T15:07:50.0735888Z WARNING: WARN: Protobuf file not found: nulloutput-cssymrefs.pb
2018-01-03T15:07:50.0736289Z WARNING: WARN: Protobuf file not found: nulloutput-cs	oken-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; StyleCop 1.0

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

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

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

  • 如果您直接使用Scanner for MSBuild从线路运行分析,它是否正常工作?
  • 尝试通过在Begin任务的“Advanced / Additional Settings”部分中设置/d:sonar.verbose=true来增加SonarQube任务的日志级别。
  • 您描述的输出与End步骤一致,无法找到在构建期间创建的问题文件和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中所述。

以上是关于StyleCop的SonarQube插件生成器无法与SonarC#v6一起使用的主要内容,如果未能解决你的问题,请参考以下文章

C# 的 Sonarqube 5.4 自定义规则

Maven Sonarqube 插件:无法执行 SonarQube:无法从服务器获取引导索引

解析 Xcode 9 生成的 Coverage 文件时 SonarQube SonarSwift 插件异常

Android - Jacoco 无法正确生成 xml 报告(已解决)

Sonarqube 问题:原因:java.lang.IllegalStateException:无法解析引导索引中的条目 - 也在删除插件 auth aad

如何在 TeamCity 中导入/解析 fxcop/stylecop 生成的 xml 报告