15

我已经尝试在 Visual Studio 2010 和 Visual Studio 2012 中执行此操作。如果我的 Gruntfile.js 文件位于项目的根目录中,我可以从构建后事件命令行运行“grunt”命令,它运行时不需要问题。

grunt or grunt.cmd

但如果它在子目录中

$(ProjectDir)Public\grunt or $(ProjectDir)Public\grunt.cmd

它给了我这个错误

The command "c:\web\Public\grunt.cmd" exited with code 9009.

我一直在研究这个,但我没有找到任何帮助。我确实在 grunt 文档中发现我需要使用“grunt.cmd”而不是仅仅调用“grunt”,但这对我没有多大帮助。

4

4 回答 4

13

发生的事情是您为 grunt 指定了一个确切的路径,它实际上并不位于 $(ProjectDir)Public\。当您在命令提示符下进入该目录并键入 grunt 时,它会执行,因为您已将路径环境变量设置为包含 grunt 所在的目录。

幸运的是 VS 中的后期构建命令就像一个命令窗口,所以你可以把它放在你的后期构建命令中:

CD $(ProjectDir)Public\
grunt

这应该可以工作(假设定义了默认的 grunt 任务)。

于 2013-08-29T20:05:56.867 回答
3

如果您打开了 Visual Studio,然后:

  1. 已安装节点包管理器 (npm) 和 grunt
  2. 然后尝试运行前/后构建命令,包括 grunt 命令。

构建将简单地失败,并显示“exited with code 9009”消息。(意思是“我不知道什么是 grunt 命令”)

要解决这种情况,只需关闭视觉工作室并重新打开它(正如@longda 在他的评论中提到的那样),一切都会正常工作。

我正在使用 VS 2013 Premium 和最新版本的 npm/grunt。

于 2015-05-07T15:20:03.307 回答
3

您可以使用任务运行器作为构建后运行,如下所示。右键单击 build --> bindings--> 然后指定是否需要它来运行 post 或 pre build

于 2015-08-11T22:11:07.137 回答
0

有点相关,我有一个奇怪的问题,即 xcopy 在 grunt 之后无法运行,将它们作为单个命令运行修复了它:

cd $(SolutionDir)..\App
grunt release && xcopy "$(SolutionDir)..\App\release" "$(TargetDir)Content\" /Y /E /S
于 2014-04-15T12:29:30.567 回答