dotnet test指定已编译dll路径时不支持/p选项的问题问询
根因说明
- 当
dotnet test后跟项目/解决方案路径时,命令会走MSBuild执行流程,因此支持/p:前缀的MSBuild属性参数,你用--no-build走项目流程时参数有效的原因就在于此。 - 当
dotnet test直接跟已生成的测试dll路径时,命令会跳过MSBuild流程,直接调用VSTest执行器运行测试,此时不识别任何/p:前缀的MSBuild参数,因此会抛出参数无效的报错。
解决方案
针对你需要收集代码覆盖率的需求,直接替换参数为VSTest原生的覆盖率收集参数即可,命令如下:
dotnet test .\bin\Release\netcoreapp3.1\MyProject.dll --collect:"XPlat Code Coverage"
如果你的项目已经安装了coverlet.collector NuGet包,该命令的执行效果和/p:CollectCoverage=true完全一致,生成的覆盖率报告格式、输出路径都没有区别。
如果需要传递其他原本通过/p:设置的自定义参数,可以遵循VSTest运行参数的传递规则,将参数放在--之后,按照运行设置的层级传递即可,例如指定覆盖率输出格式为cobertura的命令:
dotnet test .\bin\Release\netcoreapp3.1\MyProject.dll --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura
内容的提问来源于stack exchange,提问作者mabead
相关产品推荐
相关产品推荐

