.NET 5.0下dotnet test指定测试程序集找不到Code Coverage数据收集器
问题原因
你遇到的报错不是因为必须指定项目文件才能使用Code Coverage功能,而是你当前的配置适配的是.NET Framework版本的代码覆盖率收集器,.NET 5+使用的跨平台收集器没有被正确加载:
- 旧
.runsettings中指定的assemblyQualifiedName对应的是.NET Framework版本的Microsoft.VisualStudio.TraceCollector程序集,.NET 5+无法识别该旧版收集器 - 直接指定测试程序集运行时,没有项目上下文自动关联.NET 5+版本的Code Coverage收集器依赖,导致dotnet test找不到对应组件
- 你另一个项目指定项目文件能正常运行,是因为dotnet test会自动加载项目中引用的对应收集器依赖,不需要额外处理依赖关联
解决方案
指定测试程序集的场景完全可以正常使用Code Coverage功能,按以下步骤调整即可:
给所有测试项目安装对应NuGet包
确保每个测试项目都安装以下两个NuGet包,版本建议和你使用的测试工具版本(你当前是16.9.4)匹配或更高:Microsoft.NET.Test.SdkMicrosoft.CodeCoverage
安装后编译项目,相关收集器依赖会和测试程序集输出到同一目录。
调整.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中的收集器配置。调整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
相关产品推荐
相关产品推荐

