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

gre*_*mac 6 msbuild visual-studio-2010 background-process post-build-event

我正在尝试从VisualStudio运行特定项目时启动grunt监视的实例.我有一个用ember编写的页面应用程序,并使用grunt编译,它连接到用WebAPI编写的后端.我正在尝试减少摩擦,因此可以在VS中启动调试(F5)并让它完成所有工作.

如果我添加一个post-build事件来使用grunt编译应用程序,它可以正常工作:

node node_modules\grunt-cli\bin\grunt dev --no-color
Run Code Online (Sandbox Code Playgroud)

grunt watch 永远不会终止,因此VisualStudio构建似乎会挂起,直到你终止node.exe进程(除了无法使用Ctrl + Break在VS中停止之外,这是主要的预期):

node ../node_modules\grunt-cli\bin\grunt watch --no-color
Run Code Online (Sandbox Code Playgroud)

我尝试从start命令开始,但VisualStudio仍然等待它退出(只是说"Build started ..."):

start node ../node_modules\grunt-cli\bin\grunt dev --no-color
Run Code Online (Sandbox Code Playgroud)

我也尝试过start的/i参数,但这没有用.它打开一个新的窗口运行grunt watch,但在我关闭控制台窗口之前,构建不会继续(应用程序不会启动).

在此输入图像描述

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

sti*_*ijn 6

不确定为什么确切的启动不能解决问题(从命令行完美运行),但afaik msbuild为它的构建事件生成一个单独的cmd进程,因此它将与此有关.

另一种工作方式是使用Powershell来启动该过程.不知道内置的powershell语法,但是调用C#的Process.Start也可以正常工作:

powershell -Command "[System.Diagnostics.Process]::Start( '/path/to/node', 'args' )"
Run Code Online (Sandbox Code Playgroud)

这回答了你的问题,但是我认为这不是你真正想要的,你问的是错误的问题.你说你想要" 从VisualStudio 运行特定项目时启动一个实例",但是你继续问关于建设当项目发生的事件建成.这是不同的,并且看起来不太方便,因为每个构建都将启动一个新实例.相反,我认为您实际需要/需要的是每次开始调试项目时启动实例.这也是尽可能布置在这里:

  • 在解决方案中添加一个空项目
  • 在项目下输入您的节点命令 Properties->Debugging
  • 右键单击解决方案,选择 Set Startup Project
  • 选择 Multiple startup projects
  • 设置ActionStart你的主项目
  • 设置ActionStart without debugging为空项目

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