My solution has a bunch of projects one of which is a windows service; I have a prebuild step to stop the service and a postbuild step to restart it (this way the windows service exe is not locked when VS is building/overwriting it).
on pre-build:
net stop myservice
on post-build:
net start myservice
If the service is not running while I'm starting the build, the net stop command fails and that prevents the build from proceeding.
What can I do to still force the build even if the pre-build step failed?
I figured it out - you simply need to add the following statement at the end:
SET ERRORLEVEL = 0
or simply:
EXIT 0
I know this is an old post, but I recently had this issue as well. I wanted to kill the process that I was building if it was currently running, and found that I could do:
taskkill /f /im $(TargetName).exe 2>nul 1>nul Exit 0
2>nul 1>nul
without Exit 0
, or vice versa, doesn't seem to work. I have to do both.
Also worth noting this is using Visual Studio Express 2012.
I found the solution when looking into this issue as well on this blog
The 2>nul 1>nul will swallow the stderr and stdout from the command. The EXIT 0 will make sure the build event returns 0.
There is no need to redirrect stdout, just stderr. Also, set errorlevel
allows you to have extra lines later if you need. Exit will terminate immediately.
taskkill /f /im:$(TargetFileName) 2>nul &set errorlevel=0
Works in VS 2017.
Wrap your net
commands in a batch file and use exit /B 0
Would embedding the command in an executable that always returns 0 solve your issue?
in c call
system("net stop myservice")
来源:https://stackoverflow.com/questions/5806444/swallowing-errors-in-pre-build-steps-in-visual-studio-2010