Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Post-Build Event VS 2010 "Fails", but really doesn't

I have a relatively simple post-build event happening in VS 2010, just two copy operations.

The output from the copy operations shows that they have succeeded, and I've checked the directories and the file copy is working perfectly.

VS tells me that the build failed but doesn't tell me why... Here's the exact output:

1>PostBuildEvent:
1>  Description: Copying Library to Animation-Calibrator
1>          1 file(s) copied.
1>  
1>  -------------------------------------------------------------------------------
1>     ROBOCOPY     ::     Robust File Copy for Windows                              
1>  -------------------------------------------------------------------------------
1>  
1>    Started : Thu Jul 05 14:26:34 2012
1>  
1>     Source : C:\Users\Tag\Google Drive\Projects\TGAEngine\VS2010\obj\
1>       Dest : C:\Users\Tag\Google Drive\Projects\Animation-Calibrator\lib\TGAEngine\obj\
1>  
1>      Files : *.*
1>          
1>    Options : *.* /S /COPY:DAT /R:1000000 /W:30 
1>  
1>  ------------------------------------------------------------------------------
... List of files copied, no errors
1>  
1>  ------------------------------------------------------------------------------
1>  
1>                 Total    Copied   Skipped  Mismatch    FAILED    Extras
1>      Dirs :         2         0         2         0         0         0
1>     Files :        29        29         0         0         0         1
1>     Bytes :    1.92 m    1.92 m         0         0         0       697
1>     Times :   0:00:00   0:00:00                       0:00:00   0:00:00
1>  
1>  
1>     Speed :           100824150 Bytes/sec.
1>     Speed :            5769.204 MegaBytes/min.
1>  
1>     Ended : Thu Jul 05 14:26:34 2012
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: The command "copy /y .\TGAEngine.lib .\..\..\Animation-Calibrator\lib\TGAEngine
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: robocopy /s ".\obj" ".\..\..\Animation-Calibrator\lib\TGAEngine\obj"
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: :VCEnd" exited with code 3.
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.11
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

I've narrowed it down to the robocopy command.
If I do robocopy /s source dest VS fails.
If I don't use the parameter '/s' it doesn't fail, but the files don't get copied.

Any thoughts?

I'm only not posting the script because I've run it by hand and there's no errors of any kind.

like image 590
Tag Ashby Avatar asked Jul 05 '12 21:07

Tag Ashby


Video Answer


2 Answers

Usually, a process returns with exit status 0 if it has succeeded, and nonzero if it has failed. robocopy seems to have a nonstandard exit code definition: 1 means success, too; 0 means simply that no files were copied. Do you see now why VS doesn't complain if you omit /s?

Your process seems to exit with status 3. Please check with robocopy's docs if this is alright with your requirements. To my understainding, any value of 2 or larger means trouble.

You should check the exit code yourself if it indicates an error condition, and exit with 0 if everything is alright (code below not tested):

if ERRORLEVEL 2 goto HandleError
exit 0
:HandleError
exit %ERRORLEVEL%
like image 157
krlmlr Avatar answered Oct 12 '22 07:10

krlmlr


I found this one here

(robocopy /s source dest) ^& IF %ERRORLEVEL% LEQ 3 exit 0

It's a shorter version of krlmlr's answer that can be run in a single command line. I deem error level 3 or below as successful as it is the exit code when it copies files (exit code 1) and there are extra files in the destination (exit code 2).

like image 45
Mick Avatar answered Oct 12 '22 08:10

Mick