我目前在使用StyleCop.Analyzers与SonarQube合作时遇到问题。我正在使用SonarQube的v6.7,并且我已经尝试了多个版本的SonarC#插件。
将自定义规则引入SonarQube的推荐方法似乎是使用SonarQube Roslyn SDK工具(https://github.com/SonarSource/sonarqube-roslyn-sdk)从Roslyn分析器生成插件,在本例中为StyleCop.Analyers NuGet包。 / p>
这似乎对包的v1.0.0和v1.1.0-beta都有效,并且规则在SonarQube中显示 - 但是使用最新版本的SonarC#项目不会被扫描正确地,以及C#代码行的数量和发现的问题是0.但是如果你降级到插件的v5.11,项目会被正确扫描,它会找到大约2k行代码,并且我可以正确地显示任何StyleCop警告。
在VSTS构建中,它看起来好像插件正常工作,因为StyleCop警告确实出现在MSBuild阶段(我的理解是SonarQube规则覆盖了构建中的任何代码分析规则),但是他们并没有这样做。 t显示在SonarQube项目页面的摘要中。
SQ Roslyn SDK项目表示它与v4.5或更高版本的C#插件兼容 - 但它看起来并不像是在积极维护。
我无法在SonarQube日志中看到任何错误,但在"完整的SonarQube分析"中有一些警告。 VSTS中的任务:
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#插件之外,还有其他解决方法吗?
答案 0 :(得分:2)
SonarQube Roslyn SDK工具仍然是将第三方Roslyn分析仪连接到SonarQube的推荐方法。由于SonarC#插件处理生成的插件的方式没有改变,因此最近无需更改SDK。
我刚尝试为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#插件版本6.0(https://github.com/SonarSource/sonar-csharp/releases/tag/6.0.0.2033)中删除了对该功能的支持。
我的猜测是问题不在于SDK或StyleCop插件。您是否看到SonarC#analyzer本身或任何代码指标产生的任何问题?如果没有,那么它可能是构建中更普遍的问题,而不是SDK / StyleCop特有的。
其他一些建议: *您是否使用最新版本的VSTS SonarQube扩展程序?
如果直接使用Scanner for MSBuild从线路运行分析,它是否正常工作?
尝试通过在"高级/附加设置"中设置/d:sonar.verbose=true来提高SonarQube任务的日志级别。开始任务的一部分。
您描述的输出与End步骤一致,无法找到在构建期间创建的问题文件和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输出中的警告。