2012-07-05 10 views
8

मेरे पास वीएस 2010 में होने वाली अपेक्षाकृत सरल पोस्ट-बिल्ड घटना है, केवल दो प्रतिलिपि संचालन।पोस्ट-बिल्ड इवेंट वीएस 2010 "विफलता", लेकिन वास्तव में

कॉपी ऑपरेशन से आउटपुट से पता चलता है कि वे सफल हुए हैं, और मैंने निर्देशिकाओं की जांच की है और फ़ाइल कॉपी पूरी तरह से काम कर रही है।

वी.एस. मुझसे कहता है कि निर्माण में विफल रहा है, लेकिन मुझे नहीं बताता है क्यों ... यहाँ सटीक उत्पादन है:

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' का उपयोग नहीं करता तो यह असफल नहीं होता है, लेकिन फ़ाइलों को कॉपी नहीं किया जाता है।

कोई विचार?

मैं केवल स्क्रिप्ट पोस्ट नहीं कर रहा हूं क्योंकि मैंने इसे हाथ से चलाया है और किसी भी प्रकार की कोई त्रुटि नहीं है।

उत्तर

10

आमतौर पर, प्रक्रिया सफल होने पर exit status 0 के साथ एक प्रक्रिया लौटाती है, और अगर यह विफल हो जाती है तो nonzero। robocopy में एक गैर मानक मानक exit code definition है: 1 का अर्थ सफलता भी है; 0 का मतलब है कि कोई भी फाइल कॉपी नहीं की गई थी। क्या आप अब देखते हैं कि अगर आप /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)।