2012-07-05 43 views
8

我有一個相對簡單的後生成事件發生在VS 2010中,只需兩次複製操作。後生成事件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 VS失敗。
如果我不使用參數'/ s'它不會失敗,但文件不會被複制。

有什麼想法?

我只是沒有發佈腳本,因爲我已經手動運行它,並且沒有任何錯誤。

回答

10

通常,如果過程成功,則返回exit status;如果過程失敗,則返回非零值。 robocopy似乎有一個非標準exit code definition:1也意味着成功; 0意味着沒有文件被複制。你現在看到爲什麼VS不會抱怨,如果你省略/s

您的過程似乎以狀態3結束。請檢查robocopy的文檔是否符合您的要求。據我的理解,任何2或更大的值意味着麻煩。

你應該檢查自己的退出代碼,如果它是出現錯誤,並退出與0,如果一切正常(下面的代碼未測試):

if ERRORLEVEL 2 goto HandleError 
exit 0 
:HandleError 
exit %ERRORLEVEL% 
0

我發現這一個here

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

這是一個較短版本的krlmlr的答案,可以在單個命令行中運行。我認爲錯誤級別3或以下成功,因爲它是複製文件(退出代碼1)時的退出代碼,目標(退出代碼2)中有額外的文件。

相關問題