【问题标题】:Error after analyzing adding C# custom rule on SonarQube分析在 SonarQube 上添加 C# 自定义规则后出错
【发布时间】:2018-01-25 17:22:54
【问题描述】:

我在 VS2015 中使用 Roslyn 为 C# 开发了一个自定义规则,我将它部署在 SonarQube 6.4 下并在我的质量配置文件中激活它。

然后,我使用 sonar-scanner 分析了同一目录下的几个 .cs 文件。但是我得到了这个错误

ERROR: Error during SonarQube Scanner execution
java.lang.IllegalArgumentException: Custom and 3rd party Roslyn analyzers are only by MSBuild 14. Either use MSBuild 14, or disable the custom/3rd party Roslyn analyzers in your quality profile.
    at org.sonar.plugins.csharp.CSharpSensor.analyze(CSharpSensor.java:141)
    at org.sonar.plugins.csharp.CSharpSensor.executeInternal(CSharpSensor.java:112)
    at org.sonar.plugins.csharp.CSharpSensor.execute(CSharpSensor.java:79)
    at org.sonar.scanner.sensor.SensorWrapper.analyse(SensorWrapper.java:53)
    at org.sonar.scanner.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:57)
    at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:49)
    at org.sonar.scanner.phases.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:74)
    at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:175)
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:143)
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:128)
    at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:262)
    at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:257)
    at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:247)
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:143)
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:128)
    at org.sonar.scanner.task.ScanTask.execute(ScanTask.java:47)
    at org.sonar.scanner.task.TaskContainer.doAfterStart(TaskContainer.java:86)
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:143)
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:128)
    at org.sonar.scanner.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:118)
    at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:117)
    at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:63)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
    at com.sun.proxy.$Proxy0.execute(Unknown Source)
    at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:233)
    at org.sonarsource.scanner.api.EmbeddedScanner.runAnalysis(EmbeddedScanner.java:151)
    at org.sonarsource.scanner.cli.Main.runAnalysis(Main.java:123)
    at org.sonarsource.scanner.cli.Main.execute(Main.java:77)
    at org.sonarsource.scanner.cli.Main.main(Main.java:61)

一旦规则停用,我就可以正常分析我的 .cs 文件了

我不能使用SonarQube Scanner for MSBuild,因为它需要整个项目来分析,但在我的情况下,我只能有一个.cs文件的目录,这就是我需要使用声纳的原因-扫描仪

我看到here已经开发了一个解决方案,但是目前是否可用?

有没有一种解决方案可以让我在 sonar-scanner 下使用我的新规则来分析我的文件?

【问题讨论】:

    标签: c# msbuild sonarqube sonarqube-scan


    【解决方案1】:

    使用 Scanner for MSBuild 是使用 SonarQube 分析 .Net 代码的必要条件。由于您实际上已经明确的原因:

    • C# 规则(例如来自 SonarC#)依赖于 Roslyn 框架
    • Roslyn 是一个 Microsoft 框架,在代码编译期间启动
    • 因此,基于 Roslyn 的分析器需要 msbuild 执行
    • SonarQube 分析 .Net 代码因此需要使用 Scanner for MSBuild(与 msbuild 集成)

    由于上述所有原因,无法使用任何其他扫描仪分析单个 .cs 文件。

    【讨论】:

      猜你喜欢
      • 2015-08-28
      • 1970-01-01
      • 2015-09-15
      • 2016-09-03
      • 1970-01-01
      • 2015-09-21
      • 2017-01-05
      • 2016-02-12
      • 2014-02-05
      相关资源
      最近更新 更多