Запуск Grunt из командной строки Visual Studio после события сборки
Я пытался сделать это как в 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 ответа
Что происходит, вы указываете точный путь для grunt, который на самом деле не находится в $(ProjectDir)Public\. Когда вы находитесь в этом каталоге в командной строке и вводите grunt, он выполняется, потому что вы установили переменную окружения path для включения каталога, в котором находится grunt.
К счастью, команды post build в VS действуют как командное окно, так что вы можете поместить это в свои команды post build:
CD $(ProjectDir)Public\
grunt
И это должно сработать (при условии, что задание по умолчанию определено).
Если у вас была открыта Visual Studio, а затем:
- Установленный менеджер пакетов узлов (npm) и grunt
- Затем попытался выполнить команды pre/post build, включая команду grunt.
Сборка просто не удастся с сообщением "Exited with code 9009". (Значение "Я не знаю, что такое грубая команда")
Чтобы разрешить эту ситуацию, просто закройте визуальную студию и снова откройте ее (как упомянул @longda в своем комментарии), и все будет работать отлично.
Я использую VS 2013 Premium и последнюю версию npm/grunt.
Вы можете запустить как пост-сборку, используя бегунок задач, как показано ниже. Щелкните правой кнопкой мыши по сборке -> привязки -> и укажите, нужно ли вам запускать пост или предварительную сборку
Что-то связанное, у меня была странная проблема, что xcopy не запускался после grunt, выполняя их как единственная команда, исправляющая это:
cd $(SolutionDir)..\App
grunt release && xcopy "$(SolutionDir)..\App\release" "$(TargetDir)Content\" /Y /E /S