在Azure DevOps YAML管道中覆写.NET Core测试运行参数
可行解决方案
方案1:修正转义写法(直接在DotNetCoreCLI@2任务中配置)
你遇到的是YAML字符串解析和dotnet test命令参数规则的双重转义问题,Windows代理下正确的arguments写法如下:
- ${{ each project in parameters.projects }}: - task: DotNetCoreCLI@2 displayName: Execute ${{ project }} integration tests condition: succeededOrFailed() inputs: command: 'test' projects: '$(Pipeline.Workspace)/IntegrationTests/*/*${{ project }}.Test.dll' arguments: '--settings ${{ parameters.testRunSettingsFile }} -- TestRunParameters.Parameter(name="Customer1.TestConnStr", value="${{ parameters.testConnStr }}") TestRunParameters.Parameter(name="Customer2.TestConnStr", value="${{ parameters.testConnStr }}")' testRunTitle: ${{ parameters.testRunTitlePrefix }}${{ project }}
注意要点:
- 整个arguments的值用单引号包裹,此时内部的双引号不需要额外转义,YAML解析后会保留双引号传递给命令行
- 你之前的写法漏了第一个TestRunParameters.Parameter的闭合右括号
),也会引发参数格式错误 - 不需要添加
--%参数,DotNetCoreCLI@2任务在Windows代理上执行dotnet命令时会自动处理参数传递
注:管道标记为秘密的变量不需要额外处理,传递过程中不会在日志中明文暴露
方案2:使用cmd脚本任务直接执行dotnet test命令
如果内置DotNetCoreCLI任务的参数解析依然有问题,可以替换为直接执行命令的脚本任务,绕开任务的参数封装逻辑:
- ${{ each project in parameters.projects }}: - script: | dotnet test $(Pipeline.Workspace)/IntegrationTests/*/*${{ project }}.Test.dll --logger trx --settings ${{ parameters.testRunSettingsFile }} -- TestRunParameters.Parameter(name="Customer1.TestConnStr", value="${{ parameters.testConnStr }}") TestRunParameters.Parameter(name="Customer2.TestConnStr", value="${{ parameters.testConnStr }}") displayName: Execute ${{ project }} integration tests condition: succeededOrFailed()
验证小技巧
你可以在测试任务前添加调试任务,确认转义后的参数格式是否符合要求:
- script: echo TestRunParameters.Parameter(name="Customer1.TestConnStr", value="${{ parameters.testConnStr }}") displayName: Debug parameter format
查看该任务的输出,确认双引号是否正常保留即可。
内容的提问来源于stack exchange,提问作者Ian Ferguson
相关产品推荐
相关产品推荐

