构建后事件 VS 2010“失败”,但实际上并没有失败

8

我在VS 2010中有一个相对简单的后期构建事件,只有两个复制操作。

从复制操作的输出可以看出它们已经成功了,我已经检查了目录,文件复制完美地运行。

VS告诉我构建失败了,但没有告诉我原因...这是确切的输出:

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 ==========

我已经将问题缩小到了robocopy命令。
如果我使用 robocopy /s source dest ,则操作系统会失败。
如果我不使用参数“/s”,它就不会失败,但文件也不会被复制。

有什么想法吗?
我没有发布脚本,因为我手动运行没有任何错误。
2个回答

11
通常,如果进程成功,则返回exit status 0;如果失败,则返回非零值。 robocopy似乎具有非标准的exit code definition:1也表示成功;0仅表示未复制任何文件。现在你明白为什么如果省略/s,VS不会发出警告了吗?
你的进程似乎以状态3退出。请查阅robocopy文档,确定是否符合您的要求。据我理解,任何大于2的值都表示问题。
如果退出代码指示错误条件,则应自行检查退出代码,并在一切正常时退出0(以下代码未经测试):
if ERRORLEVEL 2 goto HandleError
exit 0
:HandleError
exit %ERRORLEVEL%

1
我在这里找到了一个链接
(robocopy /s source dest) ^& IF %ERRORLEVEL% LEQ 3 exit 0

这是krlmlr答案的简短版本,可以在单个命令行中运行。我认为错误级别3或以下是成功的,因为当它复制文件时(退出代码为1),在目标位置有额外文件时(退出代码为2),它就会退出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接