How do I start a background task from a VisualStudio post-build event?

大憨熊 提交于 2019-12-04 09:37:13

问题


I'm trying to start an instance of grunt watch whenever a particular project is run from VisualStudio. I have a single page-app written in ember, and compiled with grunt, which connects to a backend written with WebAPI. I'm trying to reduce friction so it's possible to Start Debugging (F5) in VS and have it get everything up and going.

If I add a post-build event to compile the app with grunt, it works fine:

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

grunt watch never terminates, so the VisualStudio build appears to hang until you terminate the node.exe process (which is mostly expected, other than not being able to use Ctrl+Break to stop in VS):

node ../node_modules\grunt-cli\bin\grunt watch --no-color

I've tried starting with the start command, but VisualStudio still waits for it to exit (just saying "Build started..."):

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

I've also tried with start's /i parameter, but that doesn't help. It opens a new window running grunt watch, but the build doesn't continue (and the app doesn't start) until I close the console window.

Presumably this has something to do with the process being a child of the build process? Is there an actual way to start a background task without VisualStudio waiting on it?


回答1:


Not sure why exactly start doesn't do the trick (works perfectly from the command line), but afaik msbuild spawns a seperate cmd process for it's build events so it will have something to do with that.

A working alternative is to use Powershell to start the process instead. No idea about the builtin powershell syntax, but invoking C#'s Process.Start works just as fine:

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

That answers your question, however I think it's not what you really want, and you're asking the wrong question.. You say you want to 'start an instance whenever a particular project is run from VisualStudio', but then you go on asking about build events which occur when a project is built. That is different and seems unhandy since every single build will start a new instance. Instead, I think what you actually want/need is to start an instance everytime you start debugging your project. That's also possible as laid out here:

  • add an empty project to your solution
  • enter your node command under the projects' Properties->Debugging
  • right-click solution, select Set Startup Project
  • select Multiple startup projects
  • set Action to Start for your main project
  • set Action to Start without debugging for the empty project

Now hit F5 and VS will start node, plus start debugging your project.



来源:https://stackoverflow.com/questions/18472834/how-do-i-start-a-background-task-from-a-visualstudio-post-build-event

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!