我目前在让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: 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; 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扩展程序?