2009-11-20 9 views
5

Estoy tratando de hacer una integración pobre con xUnit.Net desde dentro de Visual Studio como un evento de compilación posterior.Cómo crear un evento de compilación asincrónico en Visual Studio (2008)?

Lo que quiero es cuando presiono Shift + F6 (compilar el proyecto de prueba), después de una compilación exitosa debe ejecutar xUnit.Console.exe y mostrar el resultado en un archivo html y luego lanzar el archivo html dentro del navegador .

Debajo está lo que obtuve hasta ahora y funciona, pero no es de mi agrado (en que el navegador aparecerá como un cuadro de diálogo modal de ordenación y no puedo volver atrás y adelante/alternar (usando Alt-Tab) . entre Visual Studio y el navegador ahora tengo que cerrar el navegador para VS para obtener el foco de nuevo el tipo de chupa

Mi Mensaje Construir evento a continuación:.

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

Alguna idea sobre cómo conseguir que por lo result.htm se muestra dentro de un navegador y no en un modo modal?

Después de una prueba adicional, parece que cualquier shell/comando ejecutado se ejecutó en modo modal. Por ejemplo, intenté con cmd.exe simple para mostrar un shell de comandos.

He intentado utilizar inicio C: \ Windows \ Internet Explorer 7 \ iexplore.exe "$ (TargetDir) result.htm", pero eso no funcionó bien ...

Respuesta

8

Esto podría ser un poco rotonda, pero usar Windows power-shell para iniciar el proceso parece funcionar. Me puse el evento posterior a la acumulación a algo como esto:

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

En este caso, Visual Studio recupera el control de inmediato, sin esperar a que el proceso iniciado para completar.

+0

Genial, lo comprobaré. –

0

que estaba teniendo algunos problemas con el método PowerShell debido a los espacios en la ruta que estaba usando, en lugar decidí ir con un evento VBScript posterior acumulación como esto

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

Entonces VBScript como este para poner en marcha el comando asincrónico

'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 
Cuestiones relacionadas