6

Я пытаюсь запустить экземпляр grunt watch всякий раз, когда конкретный проект запускается из VisualStudio. У меня есть одностраничное приложение, написанное на ember, и скомпилированное с grunt, которое соединяется с бэкэнд, написанным с помощью WebAPI. Я пытаюсь уменьшить трение, поэтому можно начать отладку (F5) в VS и получить все, что нужно.Как запустить фоновое задание из события post-build VisualStudio?

Если добавить событие после сборки для компиляции приложения с ворчанием, она отлично работает:

не
node node_modules\grunt-cli\bin\grunt dev --no-color 

grunt watch никогда не заканчивается, поэтому VisualStudio сборки зависла, пока не прекратят node.exe процесс (которые в основном ожидается, кроме не будучи в состоянии использовать Ctrl + Break, чтобы остановить в VS):

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, но сборка не продолжается (и приложение не запускается), пока я не закрою окно консоли.

enter image description here

Предположительно, это что-то делать с процессом будучи ребенком процесса сборки? Существует ли реальный способ запуска фоновой задачи без ожидания VisualStudio?

ответ

6

Не знаете, почему именно начало не делает трюк (отлично работает из командной строки), но afaik msbuild порождает отдельный процесс cmd для его событий сборки, поэтому он будет иметь какое-то отношение к этому.

Рабочая альтернатива заключается в использовании Powershell для запуска процесса. Никакая идея о встроено синтаксисе Powershell, но ссылаясь на C# 's Process.Start работает так же, как хорошо:

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

, что ответы на ваш вопрос, но я думаю, что это не то, что вы действительно хотите, и вы задаете неправильный вопрос. Вы говорите, что хотите «запустить экземпляр всякий раз, когда конкретный проект запустит из VisualStudio», но затем вы спрашиваете о событиях сборки, которые происходят, когда проект построен. Это по-другому и кажется неуправляемым, поскольку каждая отдельная сборка запускает новый экземпляр. Вместо этого я думаю, что вы действительно хотите/нуждаетесь в том, чтобы запускать экземпляр каждый раз, когда вы начинаете отладку своего проекта.Это также возможно, как изложено here:

  • добавить пустой проект в решение
  • введите вашу команду узла под Properties->Debugging
  • решение щелкните правой кнопкой мыши проектов, выберите Set Startup Project
  • выберите Multiple startup projects
  • комплект Action до Start для вашего основного проекта
  • комплект Action до Start without debugging для пустого проекта

Теперь нажмите F5, и VS запустит узел, а затем начнет отлаживать ваш проект.

+0

Вы можете уточнить, что вы подразумеваете под «введите команду узла в свойствах проектов» - «Отладка»? –

+1

@JaredBeach - команда, которая запускает узел, как и в вопросе, что-то вроде 'node ../node_modules\grunt -cli \ bin \ grunt watch --no-color' – stijn

+0

Есть ли способ закрыть его, когда вы прекратите отладку? В разделе «Начать внешнюю программу у меня есть« C: \ Windows \ System32 \ java.exe »и в Аргументы командной строки, у меня есть «-jar fakeSMTP-2.0.jar -s». Он не закрывается, когда я останавливаю отладку, хотя –

Смежные вопросы