7

每当从 VisualStudio 运行特定项目时,我都会尝试启动一个grunt watch实例。我有一个用 ember 编写的单页应用程序,并用 grunt 编译,它连接到用 WebAPI 编写的后端。我正在尝试减少摩擦,以便可以在 VS 中启动调试 (F5) 并让它一切正常。

如果我添加一个构建后事件来用 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 仍然等待它退出(只是说“构建开始......”):

start node ../node_modules\grunt-cli\bin\grunt dev --no-color

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

在此处输入图像描述

大概这与作为构建过程的子进程有关吗?有没有一种无需 VisualStudio 等待就可以启动后台任务的实际方法?

4

1 回答 1

6

不知道为什么完全 start 不能解决问题(从命令行完美运行),但是 afaik msbuild 为其构建事件生成了一个单独的 cmd 进程,因此它与此有关。

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

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

这回答了你的问题,但是我认为这不是你真正想要的,而且你问错了问题。你说你想“每当从 VisualStudio运行特定项目时启动一个实例”,但是你继续问关于构建项目时发生的构建事件。这是不同的,而且看起来很不方便,因为每个构建都会启动一个新实例。相反,我认为您真正想要/需要的是在每次开始调试项目时启动一个实例。这也是可能的,如下所述

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

现在按 F5,VS 将启动节点,并开始调试您的项目。

于 2013-08-28T07:23:03.893 回答