Запуск Grunt из командной строки post build события Visual Studio
Я попытался сделать это как в Visual Studio 2010, так и в Visual Studio 2012. Если мой файл Gruntfile.js находится в корне моего проекта, я могу запустить команду "grunt" из командной строки post build event, и она работает без проблем.
grunt or grunt.cmd
Но если он находится в подкаталоге
$(ProjectDir)Public\grunt or $(ProjectDir)Public\grunt.cmd
Это дает мне эту ошибку
The command "c:\web\Public\grunt.cmd" exited with code 9009.
Я изучаю это, но я не нахожу там никакой помощи. Я нашел в грубой документации, что мне нужно использовать "grunt.cmd" вместо того, чтобы просто называть "хрюкать", но это мне не очень помогает.
Ответы
Ответ 1
Что происходит, вы указываете точный путь для grunt, который фактически не находится в $(ProjectDir) Public \. Когда вы находитесь в этом каталоге в командной строке и набираете grunt, он выполняется, потому что вы задали переменную окружения пути, чтобы включить каталог, в котором живет grunt.
К счастью, команды post build в VS действуют как командное окно, поэтому вы можете поместить это в свои команды сборки post:
CD $(ProjectDir)Public\
grunt
И это должно работать (если задана задание по умолчанию grunt).
Ответ 2
![]()
Вы можете запускать как пост-сборку с помощью функции runner, как показано ниже.
Щелкните правой кнопкой мыши по сборке → привязки → , а затем укажите, нужно ли вам запускать пост или предварительно построить
Ответ 3
Если вы открыли Visual Studio, а затем:
- Установленный менеджер пакетов node (npm) и grunt
- Затем попытался выполнить команды pre/post build, включая команду grunt.
Строка просто завершится неудачей с сообщением "вышло с кодом 9009". (Значение "Я не знаю, что такое команда grunt" )
Чтобы разрешить эту ситуацию, просто закройте визуальную студию и заново ее откройте (как упоминал @longda в своем комментарии), и все будет работать нормально.
Я использую VS 2013 Premium и последнюю версию npm/grunt.
Ответ 4
В некотором роде, у меня была странная проблема, что xcopy не запускался после grunt, запуская их как одну команду, зафиксировав ее:
cd $(SolutionDir)..\App
grunt release && xcopy "$(SolutionDir)..\App\release" "$(TargetDir)Content\" /Y /E /S