Azure Pipeline中.NET5项目生成多份Cobertura覆盖率文件问题求助
多份覆盖率文件生成原因
- 你在
dotnet test参数中同时启用了Coverlet的两种采集模式:--collect:"XPlat Code Coverage"属于数据收集器模式,/p:CoverletOutputFormat=cobertura属于MSBuild集成模式,两种模式独立工作会各自生成一份覆盖率文件,自然会触发多文件匹配警告。本地运行时通常会自动清理临时目录,所以不会暴露这个问题。 - Azure Pipeline代理的临时目录默认不会自动清理历史构建的文件,之前运行生成的旧覆盖率文件会留存,你用的
**/coverage.cobertura.xml通配符会匹配到所有历史文件。 - 如果你的测试项目配置了多框架目标,每个目标框架运行测试时也会单独生成一份覆盖率文件。
解决建议
- 统一采集模式,删除冗余参数,二选一即可:
选择数据收集器模式的话,删除MSBuild相关参数,修改后测试任务配置如下:
选择MSBuild集成模式的话,删除数据收集器参数,同时指定固定输出路径,避免文件生成到随机GUID目录:task: DotNetCoreCLI@2 displayName: Dotnet run tests inputs: command: "test" projects: "**/xxxxx/*.tests.csproj" arguments: '--configuration Release --collect:"XPlat Code Coverage" --no-build' testRunTitle: "xxxx"arguments: '--configuration Release /p:CoverletOutputFormat=cobertura /p:CoverletOutput=$(Agent.TempDirectory)/coverage/ --no-build' - 测试运行前添加清理旧文件的任务,彻底避免历史残留干扰:
- task: DeleteFiles@1 displayName: 清理旧覆盖率文件 inputs: SourceFolder: '$(Agent.TempDirectory)' Contents: '**/coverage.cobertura.xml' - 如果你需要合并多份覆盖率文件,也可以不用强制生成单文件,PublishCodeCoverageResults@1本身支持同时传入多份Cobertura文件自动合并统计,多文件匹配警告不影响最终结果准确性。
- 要完全规避通配符匹配问题,可以将
summaryFileLocation配置为更精确的路径,不用宽泛的**通配符匹配所有子目录。
内容的提问来源于stack exchange,提问作者Michaelo
相关产品推荐
相关产品推荐

