Как создать событие асинхронной сборки в Visual Studio (2008)?

Я пытаюсь сделать интеграцию бедняка с xUnit.Net изнутри Visual Studio в качестве события после сборки.

Я хочу, чтобы когда я нажимал Shift + F6 (сборка тестового проекта), после успешной сборки он должен запускать xUnit.Console.exe и выводить результат в html-файл, а затем запускать html-файл в браузере.

Ниже приведено то, что я получил до сих пор, и это работает, но мне не нравится (в том, что браузер будет отображаться как модальное диалоговое окно, и я не могу переключаться назад и вперед/переключаться (используя Alt-Tab) между Visual Studio и браузер.Прямо сейчас я должен закрыть браузер для VS, чтобы снова получить фокус, что отстой.

Мое событие Post Build ниже:

"$(SolutionDir)\Components\xUnit.net\xunit.console.exe" "$(TargetPath)" /html "$(TargetDir)result.htm"
"$(TargetDir)result.htm"

Любая идея о том, как сделать так, чтобы result.htm отображался внутри браузера, а не в модальном режиме?

После дальнейшего тестирования кажется, что любая выполняемая оболочка/команда выполнялась в модальном режиме. Например, я попробовал простой cmd.exe, чтобы открыть командную оболочку.

Я попытался использовать start C:\Windows\IE7\iexplore.exe "$(TargetDir)result.htm", но это тоже не сработало...


person Jimmy Chandra    schedule 20.11.2009    source источник


Ответы (2)


Это может быть немного окольным путем, но использование Windows power-shell для запуска процесса, похоже, работает. Я установил событие после сборки примерно так:

powershell start-process <actual-command-line-to-run>

В этом случае Visual Studio восстанавливает управление немедленно, не дожидаясь завершения запущенного процесса.

person Tarydon    schedule 21.12.2009
comment
Не работает, когда в командной строке есть аргументы, например. имя службы сетевого запуска - person Vladimir; 21.07.2018
comment
@Vladimir, добавить аргументы командной строки тривиально: powershell.exe Start-Process -FilePath "C:\blah\myprogram.exe" -ArgumentList '-port 10','-ip 127.0.0.1' - person rkagerer; 06.02.2020

У меня были некоторые проблемы с методом powershell из-за пробелов в пути, который я использовал, вместо этого я решил использовать событие после сборки vbscript, подобное этому

Tests.vbs """$(DevEnvDir)mstest.exe"""

Затем vbscript, подобный этому, запускает асинхронную команду

'args
mstest = WScript.Arguments(0)     'mstest path
Set WshShell = WScript.CreateObject("WScript.Shell")   'Create Windows Shell Object
WshShell.Run "Tests.bat """ & mstest & """", 0, false   'Run Async
Set WshShell = Nothing
person Michael Hamilton    schedule 26.06.2017