You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps中VSTest@2无法生成代码覆盖率报告的求助

解决.NET Framework 4.8 Azure DevOps Pipeline代码覆盖率报告生成问题

问题根源

XPlat code coverage数据收集器仅支持.NET Core/.NET 5+环境,不兼容.NET Framework 4.8,这是导致"找不到数据收集器"错误的核心原因。同时,针对.NET Framework的代码覆盖率收集需要使用适配的专属配置。

解决方案步骤

1. 修正RunSettings配置

替换原RunSettings内容,使用针对.NET Framework的Code Coverage收集器配置:

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <DataCollectionRunSettings>
    <DataCollectors>
      <DataCollector friendlyName="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">
        <Configuration>
          <Format>Cobertura</Format>
          <CodeCoverage>
            <!-- 按需调整包含/排除的程序集 -->
            <ModulePaths>
              <Include>
                <ModulePath>.*\.dll$</ModulePath>
              </Include>
              <Exclude>
                <ModulePath>.*Tests\.dll$</ModulePath>
              </Exclude>
            </ModulePaths>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

2. 调整VSTest@2任务参数

修改任务配置,确保启用代码覆盖率收集,并使用代理临时目录避免权限问题:

- task: VSTest@2
  displayName: "Run unit tests and analyze coverage"
  inputs:
    platform: "$(BuildPlatform)"
    configuration: "$(BuildConfiguration)"
    testAssemblyVer2: '**\*UnitTests.csproj'
    searchFolder: "$(System.DefaultWorkingDirectory)"
    resultsFolder: '$(Agent.TempDirectory)\TestResults'
    runSettingsFile: 'Redacted\Solution\Redacted.runsettings'
    codeCoverageEnabled: true # 开启内置覆盖率收集,配合RunSettings
    publishTestResults: true

3. 添加发布覆盖率报告任务

在VSTest任务后添加PublishCodeCoverageResults@1任务,将生成的Cobertura报告发布到Azure DevOps:

- task: PublishCodeCoverageResults@1
  displayName: "Publish code coverage report"
  inputs:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: '$(Agent.TempDirectory)\TestResults\**\coverage.cobertura.xml'

4. 验证测试项目包引用

确保测试项目已安装以下NuGet包(版本适配.NET Framework 4.8):

  • Microsoft.NET.Test.Sdk
  • NUnit
  • NUnit3TestAdapter
  • coverlet.collector(建议3.2.0及以上版本)

备选方案:使用dotnet test(仅适用于SDK风格.NET Framework项目)

如果你的测试项目是SDK风格的.NET Framework 4.8项目,可直接用DotNetCoreCLI@2任务替代VSTest@2,配置更简洁:

- task: DotNetCoreCLI@2
  displayName: "Run tests with coverage"
  inputs:
    command: 'test'
    projects: '**\*UnitTests.csproj'
    arguments: '--configuration $(BuildConfiguration) --collect:"XPlat Code Coverage" --results-directory $(Agent.TempDirectory)\TestResults'

- task: PublishCodeCoverageResults@1
  displayName: "Publish code coverage report"
  inputs:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: '$(Agent.TempDirectory)\TestResults\**\coverage.cobertura.xml'

内容的提问来源于stack exchange,提问作者yagudron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:42:12