如何在Visual Studio (2008)中创建异步构建事件?

7
我正在尝试通过Visual Studio的后期构建事件来进行xUnit.Net的简单集成。
我的目标是,在按下Shift+F6(构建测试项目)后,成功构建后运行xUnit.Console.exe,并将结果输出到一个html文件中,然后在浏览器中启动该html文件。
以下是我目前所得到的内容,它可以工作,但不符合我的要求(因为浏览器会出现一种模态对话框,我无法在Visual Studio和浏览器之间切换(使用Alt-Tab)。现在我必须关闭浏览器才能再次聚焦于VS,这有点糟糕。
我的后期构建事件如下:
"$(SolutionDir)\Components\xUnit.net\xunit.console.exe" "$(TargetPath)" /html "$(TargetDir)result.htm"
"$(TargetDir)result.htm"

有没有办法让result.htm在浏览器中显示而不是模态窗口中显示?
经过进一步测试,似乎任何运行的shell / command都会以模态方式运行。例如,我尝试使用简单的cmd.exe弹出一个命令提示符。
我尝试使用start C:\ Windows \ IE7 \ iexplore.exe“ $(TargetDir)result.htm”,但也无法正常工作...
2个回答

9

可能有些迂回,但使用Windows PowerShell启动进程似乎是有效的。我将后期构建事件设置为类似于以下内容:

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

在这种情况下,Visual Studio 会立即重新获得控制,而不必等待启动的进程完成。

当命令行带有参数时无法工作,例如net start servicename。 - Vladimir
1
@Vladimir,添加命令行参数很容易:powershell.exe Start-Process -FilePath "C:\blah\myprogram.exe" -ArgumentList '-port 10','-ip 127.0.0.1' - rkagerer

0

我在使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接