2012-07-05 30 views
8

Tôi có một sự kiện sau khi xây dựng tương đối đơn giản diễn ra trong VS 2010, chỉ hai thao tác sao chép.Sự kiện sau khi xây dựng VS 2010 "Không", nhưng thực sự không

Kết quả từ thao tác sao chép cho thấy rằng chúng đã thành công và tôi đã kiểm tra các thư mục và bản sao tệp đang hoạt động hoàn hảo.

VS nói với tôi rằng việc xây dựng thất bại nhưng không cho tôi biết tại sao ... Dưới đây là kết quả chính xác:

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

tôi đã thu hẹp nó xuống lệnh robocopy.
Nếu tôi làm robocopy /s source dest VS không thành công.
Nếu tôi không sử dụng tham số '/ s', nó sẽ không thành công, nhưng các tệp sẽ không được sao chép.

Bạn nghĩ gì?

Tôi chỉ không đăng tập lệnh vì tôi đã chạy tập lệnh đó bằng tay và không có lỗi nào.

Trả lời

10

Thông thường, quy trình trả về với exit status 0 nếu thành công và không đồng bộ nếu nó không thành công. robocopy dường như có một tiêu chuẩn exit code definition: 1 cũng có nghĩa là thành công; 0 có nghĩa là không có tệp nào được sao chép. Bạn có thấy bây giờ tại sao VS không phàn nàn nếu bạn bỏ qua /s?

Quá trình của bạn dường như thoát với trạng thái 3. Vui lòng kiểm tra với tài liệu robocopy nếu điều này không sao với yêu cầu của bạn. Để giảm giá của tôi, bất kỳ giá trị 2 hoặc lớn hơn có nghĩa là rắc rối.

Bạn nên kiểm tra mã lối ra chính mình nếu nó chỉ ra một điều kiện lỗi, và thoát với 0 nếu mọi thứ đều ổn (mã dưới đây không được kiểm tra):

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

Tôi thấy điều này một here

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

Đó là phiên bản ngắn hơn của câu trả lời của krlmlr có thể chạy trong một dòng lệnh. Tôi cho rằng mức độ lỗi 3 hoặc thấp hơn thành công vì nó là mã thoát khi nó sao chép tệp (mã thoát 1) và có các tệp bổ sung trong đích (mã thoát 2).

Các vấn đề liên quan