c# - 使用 MSBuild : Line is out of range in file 进行 SonarQube 分析

标签 c# msbuild sonarqube

因此,我们有一个使用 .NET 4.5 构建 C# webapi 项目的 TeamCity 项目,其中包括 SonarQube 分析。

在分析结束时,我们收到以下异常:

[13:41:13][Step 14/16] ERROR: Error during SonarQube Scanner execution
[13:41:13][Step 14/16] java.lang.IllegalStateException: Line 65 is out of range in the file App_Start/UnityConfig.cs (lines: 64)

我已经检查了什么:

  • 更新:进一步分析证明错误是由于dotCover代码覆盖分析导致的
  • 文件编码:UTF-8(使用 Notepad++ 验证,是没有 BOM 的 UTF-8),使用 CRLF 换行符(使用 hexdump 检查,文件以 0x0D 0x0A 结尾)
  • SonarQube 使用的编码

    [16:17:37][Step 14/16] INFO: Default locale: "en_US", source code encoding: "windows-1252" (analysis is platform dependent)
    [16:17:37][Step 14/16] INFO: Process project properties
    [16:17:37][Step 14/16] bla bla
    [16:17:59][Step 14/16] INFO: Source encoding: UTF-8, default locale: en_US
    

使用以下堆栈:

  • SonarQube 6.4(刚刚更新)
  • SonarC# 5.11(内部版本 1761)
  • dotCover 包含在 TeamCity 9.1.6 中
  • Microsoft (R) 构建引擎版本 14.0.24720.0
  • Java(TM) SE 运行时环境(build 1.8.0_111-b14)

我们在构建过程中执行以下步骤(与 SonarQube 相关):

  • 开始分析

    E:\SonarQube\sonar-scanner-msbuild-2.3.2\SonarQube.Scanner.MSBuild.exe begin /k:"CoBen" /n:"CoBen" /v:"%build.number%" /d:sonar.cs.nunit.reportsPaths="TestResult-*.xml" /d:sonar.cs.dotcover.reportsPaths="DotCover-*.html"
    
  • 构建项目

    MSBuild.exe /p:Configuration=Release;Targets=Rebuild
    
  • 使用 dotCover 运行单元测试

    C:\TeamCity\buildAgent\tools\dotCover\dotCover.exe analyse /TargetExecutable="%system.teamcity.build.workingDir%\packages\NUnit.ConsoleRunner.3.6.1\tools\nunit3-console.exe" /TargetArguments="--teamcity --agents=1 --result=%system.teamcity.build.workingDir%\TestResult-unit.xml;format=nunit2 --where \"cat != WebApiTests\" %system.teamcity.build.workingDir%\TestDlls.nunit" /Output="DotCover-unit.html" /ReportType="HTML"
    
  • 使用 dotCover 运行集成测试

    C:\TeamCity\buildAgent\tools\dotCover\dotCover.exe analyse /TargetExecutable="%system.teamcity.build.workingDir%\packages\NUnit.ConsoleRunner.3.6.1\tools\nunit3-console.exe" /TargetArguments="--teamcity --agents=1 --result=%system.teamcity.build.workingDir%\TestResult-webapi.xml;format=nunit2 --where \"cat == WebApiTests\" %system.teamcity.build.workingDir%\TestDlls.nunit" /Output="DotCover-webapi.html" /ReportType="HTML"
    
  • 结束 Sonar 分析

    E:\SonarQube\sonar-scanner-msbuild-2.3.2\SonarQube.Scanner.MSBuild.exe end
    

确切的错误:

[23:25:19][Step 14/16] INFO: Parsing the dotCover report E:\TeamCity\buildAgent\work\5728a1531387749f\.\DotCover-webapi\src\996.html
[23:25:19][Step 14/16] INFO: Parsing the dotCover report E:\TeamCity\buildAgent\work\5728a1531387749f\.\DotCover-webapi\src\997.html
[23:25:19][Step 14/16] INFO: Parsing the dotCover report E:\TeamCity\buildAgent\work\5728a1531387749f\.\DotCover-webapi\src\998.html
[23:25:19][Step 14/16] INFO: Parsing the dotCover report E:\TeamCity\buildAgent\work\5728a1531387749f\.\DotCover-webapi\src\999.html
[23:25:19][Step 14/16] INFO: Adding this code coverage report to the cache for later reuse: E:\TeamCity\buildAgent\work\5728a1531387749f\.\DotCover-webapi.html
[23:25:19][Step 14/16] INFO: ------------------------------------------------------------------------
[23:25:19][Step 14/16] INFO: EXECUTION FAILURE
[23:25:19][Step 14/16] INFO: ------------------------------------------------------------------------
[23:25:19][Step 14/16] INFO: Total time: 12:17.339s
[23:25:20][Step 14/16] ERROR: Error during SonarQube Scanner execution
[23:25:20][Step 14/16] INFO: Final Memory: 52M/392M
[23:25:20][Step 14/16] INFO: ------------------------------------------------------------------------
[23:25:20][Step 14/16] java.lang.IllegalStateException: Line 65 is out of range in the file App_Start/UnityConfig.cs (lines: 64)
[23:25:20][Step 14/16]  at org.sonar.api.internal.google.common.base.Preconditions.checkState(Preconditions.java:197)
[23:25:20][Step 14/16]  at org.sonar.api.batch.sensor.coverage.internal.DefaultCoverage.validateLine(DefaultCoverage.java:90)
[23:25:20][Step 14/16]  at org.sonar.api.batch.sensor.coverage.internal.DefaultCoverage.lineHits(DefaultCoverage.java:78)
[23:25:20][Step 14/16]  at org.sonar.plugins.dotnet.tests.CoverageReportImportSensor.analyze(CoverageReportImportSensor.java:94)
[23:25:20][Step 14/16]  at org.sonar.plugins.dotnet.tests.CoverageReportImportSensor.execute(CoverageReportImportSensor.java:69)
[23:25:20][Step 14/16]  at org.sonar.scanner.sensor.SensorWrapper.analyse(SensorWrapper.java:53)
[23:25:20][Step 14/16]  at org.sonar.scanner.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:57)
[23:25:20][Step 14/16]  at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:49)
[23:25:20][Step 14/16]  at org.sonar.scanner.phases.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:78)
[23:25:20][Step 14/16]  at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:175)
[23:25:20][Step 14/16]  at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:143)
[23:25:20][Step 14/16]  at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:128)
[23:25:20][Step 14/16]  at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:262)
[23:25:20][Step 14/16]  at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:257)
[23:25:20][Step 14/16]  at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:255)
[23:25:20][Step 14/16]  at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:247)
[23:25:20][Step 14/16]  at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:143)
[23:25:20][Step 14/16]  at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:128)
[23:25:20][Step 14/16]  at org.sonar.scanner.task.ScanTask.execute(ScanTask.java:47)
[23:25:20][Step 14/16]  at org.sonar.scanner.task.TaskContainer.doAfterStart(TaskContainer.java:86)
[23:25:20][Step 14/16]  at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:143)
[23:25:20][Step 14/16]  at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:128)
[23:25:20][Step 14/16]  at org.sonar.scanner.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:118)
[23:25:20][Step 14/16]  at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:117)
[23:25:20][Step 14/16]  at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:63)
[23:25:20][Step 14/16]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[23:25:20][Step 14/16]  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[23:25:20][Step 14/16]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[23:25:20][Step 14/16]  at java.lang.reflect.Method.invoke(Method.java:498)
[23:25:20][Step 14/16]  at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
[23:25:20][Step 14/16]  at com.sun.proxy.$Proxy0.execute(Unknown Source)
[23:25:20][Step 14/16]  at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:233)
[23:25:20][Step 14/16]  at org.sonarsource.scanner.api.EmbeddedScanner.runAnalysis(EmbeddedScanner.java:151)
[23:25:20][Step 14/16]  at org.sonarsource.scanner.cli.Main.runAnalysis(Main.java:123)
[23:25:20][Step 14/16]  at org.sonarsource.scanner.cli.Main.execute(Main.java:77)
[23:25:20][Step 14/16]  at org.sonarsource.scanner.cli.Main.main(Main.java:61)
[23:25:20][Step 14/16] ERROR: 
[23:25:20][Step 14/16] ERROR: Re-run SonarQube Scanner using the -X switch to enable full debug logging.
[23:25:21][Step 14/16] The SonarQube Scanner did not complete successfully

知道我们还能做什么吗?

最佳答案

解决了!我从 dotCover 切换到 OpenCover,现在一切运行良好。

关于c# - 使用 MSBuild : Line is out of range in file 进行 SonarQube 分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44331973/

相关文章:

javascript - SonarQube 显示为 'remove this useless assignment to local variable'

sonarqube - 无法执行 : This project contains Java source files that are not compiled 导致的 Findbugs

c# - 是否有执行一系列超时的模式?

MSbuild,如何访问内联任务代码中的项目属性值?

build - 如何对 msbuild 内置目标(如构建/重建)设置条件?

msbuild - 构建错误 + 为 excel 2010 创建 VSTO 插件

java - 在 Jenkins 上构建失败,导致 Sonar 分析失败

c# - DataGridView 只读 "bug"

c# - 如何正确使用列表作为 Npgsql 和 Dapper 的参数

c# - System.IndexOutOfRangeException - 索引超出数组范围