我有一个文件夹,其中有一些dll包含单词“Tests”作为文件名
例如“C:\ Api \ Myfile.Tests.dll”
我需要获取其中包含名称“Tests”的文件,并使用power shell脚本将文件作为文件传递给VSTest.Console.exe。
我的代码是
$DirectoryName = "C:\api";
$Parameters = "";
Get-ChildItem $DirectoryName -Filter "*Tests*" | ForEach-Object {
$Parameters = $Parameters + $DirectoryName + "\" + $_ ;
}
$TestRunner = "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe";
$Parameters;
# & $TestRunner "C:\api\Base.Tests.dll" "C:\api\Model.Tests.dll";
& $TestRunner $Parameters;
$ Parameters提供包含“Tests”的所有文件名。形成的字符串带有
之类的空格C:\ api \ Base.Tests.dll C:\ api \ Model.Tests.dll
但剧本仍无效。我认为它作为一个单一的路径,因为它在一个刺痛的变量。如果是这样,那么如何解决这个问题。
答案 0 :(得分:2)
我认为可能存在两个问题:
此代码对我有用:
Get-ChildItem $DirectoryName -Filter "*Tests*" |
ForEach-Object {$parameters = $parameters + "`"" + $directoryName + "\" + $_ + "`" ";}
答案 1 :(得分:1)
希望这能节省一些时间......但由于我的可执行路径包含空格,我遇到了麻烦......
所以,我必须将我的命令格式化为字符串。请注意转义'&'和逃脱的报价。显然,带空格的命令需要包含'&'...我也尝试通过'&'直接调用它...但是,它删除了dll参数列表的双引号并在整个混乱中引用了引号这不是vsTest.Console.exe所期望的......无论如何,这里的解决方案对我有用......
Function Get-AllTestDllsAsQuotedStrings {
$parameters = ""
Get-ChildItem `
-Path "C:\code\git\YourProject\Source" `
-File `
-Recurse `
-Filter *.dll |
where-object FullName -Like *bin\debug\*test*.dll |
ForEach-Object {
$parameters = $parameters + "`"" + $_.FullName + "`" ";
}
return $parameters
}
$vsTestConsoleExe = "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe"
$command = "`& `"$vsTestConsoleExe`" $(Get-AllTestDllsAsQuotedStrings)"
write-host $command
invoke-expression $command
答案 2 :(得分:0)
如果有帮助,这是我的解决方案:
$Paths = Get-Childitem Test -recurse | Where-Object {$_.PSIsContainer -and $_.FullName -notmatch "obj" -and $_.name -like "net462"} | Select-Object -expandproperty fullname
$Args = Get-ChildItem -Path $Paths -Filter "*Tests.dll" | Select-Object -expandproperty fullname
$Args = $Args + "/InIsolation" + "/Logger:trx;logfile=net462.trx" +"/Enablecodecoverage"
$exe = 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe'
echo $Args
& $exe $Args