如何从VisualStudio构建后事件启动后台任务?

时间:2013-08-27 18:24:56

标签: visual-studio-2010 msbuild background-process post-build-event

每当从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的新窗口,但在我关闭控制台窗口之前,构建不会继续(并且应用程序无法启动)。

enter image description here

据推测,这与构建过程的子进程有什么关系?有没有实际的方法来启动后台任务而没有VisualStudio等待它?

1 个答案:

答案 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
  • 为您的主要项目设置ActionStart
  • 为空项目
  • 设置ActionStart without debugging

现在点击F5,VS将启动节点,再开始调试你的项目。