2016-05-09 1 views
0

У меня есть папка, которая имеет некоторые библиотеки DLL содержит слово «тесты», как имя файлаКак выполнить VSTest.Console.exe, используя скрипт с несколькими именами файлов

, например, «C: \ Api \ Myfile.Tests .dll "

Мне нужно получить этот файл, который содержит в нем имя« Тесты »и передать файлы 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; 

в $ Параметры дают все имена файлов, которые содержат «тесты» в нем. Строка формируется это с пробелами, как

C: \ апи \ Base.Tests.dll C: \ апи \ Model.Tests.dll

Но все-таки сценарий не работает. Я предполагаю, что он рассматривается как единственный путь с момента его появления в переменной sting. Если это так, то как это решить.

ответ

2

Я думаю, что может быть два вопроса:

  • конкатенации Foreach-объект должен добавить с промежуточным пространством.
  • Пути файлов должны быть окружены кавычками. (У меня была та же проблема попытке вызова vstest, пока я не узнал об этом.)

Этот код работает для меня:

Get-ChildItem $DirectoryName -Filter "*Tests*" | 
    ForEach-Object {$parameters = $parameters + "`"" + $directoryName + "\" + $_ + "`" ";} 
0

Будем надеяться, что это экономит кого-то некоторое время ... но у меня был груз проблемы с этим из-за моего исполняемого пути, содержащего пробелы ...

Итак, мне пришлось отформатировать мою команду в виде строки. Обратите внимание на экранированные «&» и экранированные кавычки. По-видимому, команды с пробелами должны включать «&» ... Я также попытался вызвать его непосредственно через «&» ... Однако это разделило двойные кавычки для списка параметров dll и бросило кавычки вокруг всего беспорядка, который isn что 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 

 Смежные вопросы

  • Нет связанных вопросов^_^