Powershell 使用TFS 2015构建预览生成OpenCover报告

Powershell 使用TFS 2015构建预览生成OpenCover报告,powershell,tfs,nunit,opencover,tfs-2015,Powershell,Tfs,Nunit,Opencover,Tfs 2015,我正在使用以下代码从TFS 2015的构建预览中的powershell脚本任务生成覆盖率报告。我可以在构建服务器上运行它,它会正确地生成报告,但当它作为构建的一部分运行时,它会抱怨没有pdb文件 没有结果,原因可能有很多。最常见的 原因是: 1) 与筛选器匹配的程序集缺少PDB。请查看输出文件,并参阅有关筛选器的使用指南(Usage.rtf) 2) 探查器可能未正确注册,请参阅使用指南和-register开关 在做了一点谷歌搜索之后,我发现/noshadow应该已经足够了,但是nunit的参数似

我正在使用以下代码从TFS 2015的构建预览中的powershell脚本任务生成覆盖率报告。我可以在构建服务器上运行它,它会正确地生成报告,但当它作为构建的一部分运行时,它会抱怨没有pdb文件

没有结果,原因可能有很多。最常见的 原因是:

1) 与筛选器匹配的程序集缺少PDB。请查看输出文件,并参阅有关筛选器的使用指南(Usage.rtf)

2) 探查器可能未正确注册,请参阅使用指南和-register开关

在做了一点谷歌搜索之后,我发现/noshadow应该已经足够了,但是nunit的参数似乎被忽略了。我假设它们被忽略了,因为/nologo命令应该从打印中剥离版权信息,但在控制台输出中,我仍然可以看到显示的信息

同样,使用构建输出目录作为工作目录也应该解决这个问题,但是使用Set Location并不能解决构建期间的问题

这是我当前正在运行的脚本:

Param
(
    [string] $SourceDir = $env:BUILD_SOURCESDIRECTORY,
    [string] $UnitTestDir = "",
    [string] $UnitTestDll ="",
    [string] $Filter = "",
    [string] $ExcludeByAttribute = "System.CodeDom.Compiler.GeneratedCodeAttribute",
    [string] $nUnitOutputPath = "Output.txt",
    [string] $nUnitErrorOutputPath = "Error.text",
    [string] $XmlOutputPath = "_CodeCoverageResult.xml",
    [string] $ReportOutputPath = "_CodeCoverageReport"
)

$openCoverPath = "E:\BuildTools\OpenCover.4.5.3723\OpenCover.Console.exe"
$nUnitPath = "E:\BuildTools\NUnit.Runners.2.6.4\tools\nunit-console.exe"
$reportGeneratorPath = "E:\BuildTools\ReportGenerator.2.1.1.0\ReportGenerator.exe"

$nUnitArgs = "$SourceDir\$UnitTestDir\$UnitTestDll /noshadow /nologo"

Write-Host "[Debug] Setting location to $SourceDir\$UnitTestDir"
Set-Location $SourceDir\$UnitTestDir

if (!(Test-Path $SourceDir\CodeCoverage)) {
    New-Item $SourceDir\CodeCoverage -type directory
}
Write-Host "[Debug] Running unit tests from $SourceDir\$UnitTestDir\$UnitTestDll" 
Write-Host "[Debug] Command: $openCoverPath -target:$nUnitPath -targetargs:""$nUnitArgs"" -filter:$Filter -excludebyattribute:$ExcludeByAttribute -register:user -output:""$SourceDir\CodeCoverage\$XmlOutputPath"""

& $openCoverPath -target:$nUnitPath -targetargs:"$nUnitArgs" -filter:$Filter -excludebyattribute:$ExcludeByAttribute -register:user -output:"$SourceDir\CodeCoverage\$XmlOutputPath"

Write-Host "[Debug] Generating report"
Write-Host "[Debug] Command: $reportGeneratorPath ""-reports:$SourceDir\CodeCoverage\$XmlOutputPath"" ""-targetdir:$SourceDir\CodeCoverage\$ReportOutputPath"""

& $reportGeneratorPath -reports:$SourceDir\CodeCoverage\$XmlOutputPath -targetdir:$SourceDir\CodeCoverage\$ReportOutputPath

Write-Host "[Debug] Finished running tests and generating report"

您可能需要使用``将nunit参数用引号括起来

下一版本中有一个补丁,它将检测您何时将无法识别的参数传递给OpenCover

& $openCoverPath -target:$nUnitPath -targetargs:"`"$nUnitArgs`"" -filter:$Filter -excludebyattribute:$ExcludeByAttribute -register:user -output:"$SourceDir\CodeCoverage\$XmlOutputPath"