每当从VisualStudio运行特定项目时,我都会尝试启动grunt watch的实例。我有一个用ember编写的页面应用程序,并使用grunt编译,它连接到用WebAPI编写的后端。我正在努力减少摩擦,因此可以在VS中启动调试(F5)并让它完成所有工作。
如果我添加一个post-build事件来使用grunt编译应用程序,它可以正常工作:
node node_modules\grunt-cli\bin\grunt dev --no-color
grunt watch
永远不会终止,因此VisualStudio构建似乎会挂起,直到你终止node.exe进程(这主要是预期的,除了不能在VS中使用Ctrl + Break停止):
node ../node_modules\grunt-cli\bin\grunt watch --no-color
我尝试从start
命令开始,但VisualStudio仍在等待它退出(只是说“Build started ...”):
start node ../node_modules\grunt-cli\bin\grunt dev --no-color
我也尝试使用start的/i
参数,但这没有用。它会打开一个运行grunt watch
的新窗口,但在我关闭控制台窗口之前,构建不会继续(并且应用程序无法启动)。
据推测,这与构建过程的子进程有什么关系?有没有实际的方法来启动后台任务而没有VisualStudio等待它?
答案 0 :(得分:6)
不确定为什么确切的启动不能解决问题(从命令行完美运行),但afaik msbuild会为它的构建事件生成一个单独的cmd进程,因此它将与此有关。
一种可行的替代方法是使用Powershell来启动该过程。不知道内置的PowerShell语法,但是调用C#的Process.Start也可以正常工作:
powershell -Command "[System.Diagnostics.Process]::Start( '/path/to/node', 'args' )"
这回答了你的问题,但是我认为这不是你真正想要的,而且你提出了错误的问题。你说你想要'每当某个项目运行时启动一个实例从VisualStudio',然后你继续询问项目构建时发生的构建事件。这是不同的,并且看起来不太方便,因为每个构建都将启动一个新实例。相反,我认为您实际需要/需要的是每次开始调试项目时启动实例。这也是可能的here:
Properties->Debugging
Set Startup Project
Multiple startup projects
Action
至Start
Action
至Start without debugging
现在点击F5,VS将启动节点,再开始调试你的项目。