覆盖率报告导致 Microsoft.VisualStudio.Coverage.VanguardException

问题描述

我正在尝试将 Cobertura 报告生成集成到我的 azure 管道中。为此,我在我的 .Net 核心测试项目中添加了 coverlet.collector 3.0.3。下面是我用于测试运行的 yaml 命令

- task: DotNetCoreCLI@2
  displayName: Test
  inputs:
    command: test
    projects: '**/*Test/*.csproj'
    arguments: '--collect:"XPlat Code Coverage"  --settings CodeCoverage.runsettings --logger trx'
    publishTestResults: false

我使用 Reportgenerator 任务来合并和发布覆盖率报告。这一切在我的代码一个分支(一个旧分支,我不久前开始在其上设置管道)中都可以正常工作。但是当我尝试指向管道中的最新分支时,出现如下错误

Data collector 'Code Coverage' message: Data collector caught an exception of type 'Microsoft.VisualStudio.Coverage.VanguardException': 'Running event not received from CodeCoverage.exe. Check eventlogs for failure reason

我已经检查了两个分支中的几乎所有内容,Microsoft.Net.Test.SDK、coverlet.collector,它们都是相同的版本。我不确定 2 个分支之间有什么不同,以及我应该在 2 个代码分支之间寻找什么差异,这可能会导致此类问题。

下面添加成功和失败的完整日志。

成功(使用旧分支时)

C:\windows\system32\chcp.com 65001
Active code page: 65001
Info: .NET Core SDK/runtime 2.2 and 3.0 are Now End of Life(EOL) and have been removed from all hosted agents. If you're using these SDK/runtimes on hosted agents,kindly upgrade to newer versions which are not EOL,or else use UseDotNet task to install the required version.
"C:\Program Files\dotnet\dotnet.exe" test I:\Agent-Win-R_work\489\s\XXXX.Business.Test\XXXX.Business.Test.csproj "--collect:XPlat Code Coverage" --settings CodeCoverage.runsettings --logger trx
Test run for I:\Agent-Win-R_work\489\s\XXXX.Business.Test\bin\Debug\netcoreapp3.1\XXXXWeb.Business.Test.dll(.NETCoreApp,Version=v3.1)
Microsoft (R) Test Execution Command Line Tool Version 16.5.0
copyright (c) Microsoft Corporation. All rights reserved.

Starting test execution,please wait...

A total of 1 test files matched the specified pattern.
Microsoft (R) Coverage Collection Tool Version 16.0.30319.3002

copyright (c) Microsoft Corporation. All rights reserved.

Results File: I:\Agent-Win-R_work\489\s\XXXX.Business.Test\TestResults\SVCGIDETFSProdBld01_MP-GIDE-522C_2021-07-01_04_18_04.trx

Attachments:
I:\Agent-Win-R_work\489\s\XXXX.Business.Test\TestResults\5f62864f-6c2c-4188-ac02-0dc536b464b3\coverage.cobertura.xml
I:\Agent-Win-R_work\489\s\XXXX.Business.Test\TestResults\5f62864f-6c2c-4188-ac02-0dc536b464b3\SVCGIDETFSProdBld01_MP-GIDE-522C_2021-07-01.04_17_58.coverage
Test Run Successful.
Total tests: 6
Passed: 6
Total time: 3.8813 Seconds

失败(指向新分支时)

C:\windows\system32\chcp.com 65001
Active code page: 65001
Info: .NET Core SDK/runtime 2.2 and 3.0 are Now End of Life(EOL) and have been removed from all hosted agents. If you're using these SDK/runtimes on hosted agents,or else use UseDotNet task to install the required version.
"C:\Program Files\dotnet\dotnet.exe" test I:\Agent-Win-R_work\489\s\XXXX.Test\XXXXBusiness.Test.csproj "--collect:XPlat Code Coverage" --settings CodeCoverage.runsettings --logger trx
Test run for I:\Agent-Win-R_work\489\s\XXXX.Business.Test\bin\Debug\netcoreapp3.1\XXXXWeb.Business.Test.dll(.NETCoreApp,please wait...

A total of 1 test files matched the specified pattern.
Data collector 'Code Coverage' message: Data collector caught an exception of type 'Microsoft.VisualStudio.Coverage.VanguardException': 'Running event not received from CodeCoverage.exe. Check eventlogs for failure reason.'. More details: ..
Results File: I:\Agent-Win-R_work\489\s\XXXX.Business.Test\TestResults\SVCGIDETFSProdBld01_MP-GIDE-522C_2021-07-01_04_12_42.trx

Attachments:
I:\Agent-Win-R_work\489\s\XXXX.Business.Test\TestResults\3839c24a-e17d-4d0d-9953-359388d5a940\coverage.cobertura.xml
Test Run Failed.
Total tests: 6
Passed: 6

我也遇到了这个问题线程:https://github.com/microsoft/azure-pipelines-agent/issues/2839 用户怀疑它是代理升级问题,但对我来说似乎并非如此,因为我能够成功运行它代码分支。

感谢任何建议或指导。

解决方法

当我向 Coverlet 团队提出这个问题时,我得到了他们的快速回复。他们注意到了我完全错过的东西。

Microsoft (R) Coverage Collection Tool Version 16.0.30319.3002

这出现在我的成功日志中,这意味着 Microsoft 代码覆盖率与 Coverlet 代码覆盖率并行运行。他们怀疑如果您同时运行两个代码覆盖率收集器,我们可能会遇到一些奇怪的错误,并且在两个分支中如何运行测试之间的一些时间问题会导致不同的行为。

一旦我在我的 .runsettings 文件中禁用了 Microsoft 代码覆盖,问题就得到了解决

之前:

 <DataCollector friendlyName="XPlat code coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector,Microsoft.VisualStudio.TraceCollector,Version=11.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a">
      

现在

<DataCollector friendlyName="XPlat code coverage">