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

向Azure Pipeline发布测试结果报重复键错误如何解决

报错原因

该重复键报错由以下几个问题共同触发:

  • 你拷贝到流水线工作目录的测试结果中存在重复的.trx结果文件:要么是Docker内执行测试时多次运行dotnet test生成了多份结果,要么是之前流水线运行残留的测试文件没有被清理,PublishTestResults任务会递归匹配所有trx文件上传,重复的测试用例记录会触发Azure DevOps测试存储的唯一索引约束。
  • 你当前使用的PublishTestResults@2任务版本为2.170.1,该旧版本存在已知的trx解析bug,在处理Linux容器内生成的跨平台测试结果时,会为同一条测试用例生成重复的入库标识,触发重复键报错。
  • 从日志可见发布任务运行时调用的dotnet版本为3.1.418,和你构建测试使用的.NET 6版本不一致,会进一步提升解析bug的触发概率。
修复方案

按优先级依次操作即可解决:

  1. 修改测试结果拷贝步骤,先清理本地残留的旧测试文件,拷贝完成后自动删除重复的trx文件,仅保留最新生成的结果,调整后的代码如下:
    - pwsh: |
        # 清空本地历史测试结果目录,避免旧文件干扰
        if (Test-Path ./testresults) { Remove-Item ./testresults -Recurse -Force }
        $id=docker images --filter "label=test=$(Build.BuildId)" -q | Select-Object -First 1
        docker create --name testcontainer $id
        docker cp testcontainer:/testresults ./testresults
        docker rm testcontainer
        # 删除重复生成的历史trx文件,仅保留最新一份
        Get-ChildItem -Path ./testresults -Filter *.trx -Recurse | Sort-Object LastWriteTime -Descending | Select-Object -Skip 1 | Remove-Item -Force
      displayName: 'Copy test results'
    
  2. 调整PublishTestResults任务配置,开启测试结果自动合并,使用任务的最新稳定版本而非固定旧版本,配置如下:
    - task: PublishTestResults@2
      inputs:
        testResultsFormat: 'VSTest'
        testResultsFiles: '**/*.trx'
        searchFolder: '$(System.DefaultWorkingDirectory)/testresults'
        mergeTestResults: true
      displayName: 'Publish test results'
    
  3. 检查Dockerfile内的测试执行逻辑,确认没有重复执行dotnet test命令,确认镜像内的/testresults目录不会包含历史构建生成的旧结果文件,保证容器内导出的结果仅为本次测试运行生成的唯一一份trx。
  4. 如果完成上述操作后仍有报错,在发布测试结果步骤前增加.NET 6 SDK的启用步骤,保证结果解析时使用的SDK版本和测试执行版本一致:
    - task: UseDotNet@2
      inputs:
        packageType: 'sdk'
        version: '6.x'
      displayName: 'Use .NET 6 SDK'
    

修复验证:重新运行流水线后,发布测试结果日志中dotnet版本显示为6.x开头,且无重复键相关警告即为修复成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:21:26