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

.NET 5.0下dotnet test指定测试程序集找不到Code Coverage数据收集器

问题原因

你遇到的报错不是因为必须指定项目文件才能使用Code Coverage功能,而是你当前的配置适配的是.NET Framework版本的代码覆盖率收集器,.NET 5+使用的跨平台收集器没有被正确加载:

  1. 旧.runsettings中指定的assemblyQualifiedName对应的是.NET Framework版本的Microsoft.VisualStudio.TraceCollector程序集,.NET 5+无法识别该旧版收集器
  2. 直接指定测试程序集运行时,没有项目上下文自动关联.NET 5+版本的Code Coverage收集器依赖,导致dotnet test找不到对应组件
  3. 你另一个项目指定项目文件能正常运行,是因为dotnet test会自动加载项目中引用的对应收集器依赖,不需要额外处理依赖关联

解决方案

指定测试程序集的场景完全可以正常使用Code Coverage功能,按以下步骤调整即可:

  1. 给所有测试项目安装对应NuGet包
    确保每个测试项目都安装以下两个NuGet包,版本建议和你使用的测试工具版本(你当前是16.9.4)匹配或更高:

    • Microsoft.NET.Test.Sdk
    • Microsoft.CodeCoverage
      安装后编译项目,相关收集器依赖会和测试程序集输出到同一目录。
  2. 调整.runsettings配置
    删除DataCollector节点中的assemblyQualifiedName属性,不需要强制绑定旧版.NET Framework的收集器程序集,修改后的节点如下:

    <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0">
        <Configuration>
            <CodeCoverage>
                <ModulePaths>
                    <Include>
                        <ModulePath>{someRegexToLimitCodeCoverageToSpecificTestAssemblies}</ModulePath>
                    </Include>
                </ModulePaths>
            </CodeCoverage>
        </Configuration>
    </DataCollector>
    

    如果没有特殊过滤规则,也可以直接在命令中加--collect "Code Coverage"参数,省略.runsettings中的收集器配置。

  3. 调整dotnet test命令(可选)
    可以直接在运行命令中显式指定收集器,确保被正确加载:

    D:\test-2-1\_tool\dotnet\dotnet.exe test A.Test.dll B.Test.dll C.Test.dll --collect "Code Coverage" --logger trx --results-directory D:\test-2-1\_temp --settings D:\test-2-1\5\s\.runsettings
    

注意事项

如果在CI环境运行,确保使用的.NET SDK版本不低于5.0.400,早期.NET 5 SDK存在直接指定测试程序集时无法正确加载收集器的已知问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:15:03