1

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

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

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

2) profiler 可能没有正确注册,请参考使用指南和-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"
4

1 回答 1

1

您可能需要使用 `" 将您的 nunit args 括在引号中

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

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

于 2015-08-20T03:56:54.297 回答