12

我正在尝试从C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE. 更重要的是,我正在获取当前目录中的所有程序集并将它们设置为单独的 /testcontainer 参数。如果没有 PowerShell 抱怨,我无法弄清楚如何做到这一点。

$CurrentDirectory = [IO.Directory]::GetCurrentDirectory()

$MSTestCall = '"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"'

foreach($file in Get-ChildItem $CurrentDirectory) 
{
    if($file.name -match "\S+test\S?.dll$" )
    {
        $MSTestArguments += "/TestContainer:" + $file + " "
    }
}

$MSTestArguments += " /resultsFile:out.trx"
$MSTestArguments += " /testsettings:C:\someDirectory\local64.testsettings"

Invoke-Expression "$MSTestCall $MSTestArguments"

我从这段代码中得到的错误是:

Invoke-Expression :您必须在“/”运算符的右侧提供值表达式。

当我尝试在名称中没有空格的目录中调用 mstest.exe 时,我没有收到此错误(不需要额外的“”)。

当我尝试使用&时,

&$MSTestCall $MSTestArguments

它将 $MSTestArguments 作为单个参数传递,MSTest 会立即抛出该参数。建议?

4

2 回答 2

23

我建议您使用参数数组和 operator &。在此处查看我的答案中的示例:执行存储在 Powershell 中的变量中的命令

在这种情况下,代码应该是这样的:

$MSTestCall = "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"
$MSTestArguments = @('/resultsFile:out.trx', '/testsettings:C:\someDirectory\local64.testsettings')

foreach($file in Get-ChildItem $CurrentDirectory)  
{ 
    if($file.name -match "\S+test\S?.dll$" ) 
    { 
        $MSTestArguments += "/TestContainer:" + $file
    } 
} 

& $MSTestCall $MSTestArguments
于 2010-10-06T05:45:00.230 回答
-1

这行得通吗?

$MSTestCall = @'"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"'@
于 2010-10-05T22:56:18.380 回答