2012-08-01 7 views
6

मेरे समाधान में, कुछ प्रोजेक्ट में ऐसे कार्य होते हैं जिन्हें अंत में चलाने की आवश्यकता होती है, जैसे कि विभिन्न स्थानों पर प्रतिलिपि बनाना। हम लागू कि AfterTargets="Build" साथ: अगर काम करता हैAfterTargets विफलताओं में विफल नहीं है msbuild run

<Target Name="CopyStuff" AfterTargets="Build"> 
    <Copy SourceFiles="..." DestinationFolder="..." /> 
</Target> 

। हालांकि, जब समाधान (! नहीं व्यक्तिगत परियोजना) के निर्माण, अगर प्रति विफल रहता है, हम एक लाल निर्माण चेतावनी मिलती है, लेकिन MSBuild (और इसलिए TFS निर्माण) सफल होता है:

> msbuild /t:clean;build my.sln 
(...) 
(in red...) error MSB3021: Unable to copy file (...) 

> echo %errorlevel% 
0  <<<<<<< This means succeeded 
मेरी समझ के लिए

, कि क्योंकि MSBuild है सोचता है कि जब तक प्रमुख "बिल्ड" लक्ष्य पारित हो जाता है, तब तक सब कुछ भी पारित हो जाता है।

हमारा कामकाज - BeforeTargets="AfterBuild" पर लक्ष्य बदलें, जो मेरा लक्ष्य बिल्ड लक्ष्य के अंदर रखता है। हालांकि, इसके लिए "बिल्ड" लक्ष्य की सामग्री के ज्ञान की आवश्यकता है, और अन्य परियोजना प्रकारों के लिए काम नहीं कर सकता है।

प्रश्न:

  1. वहाँ एक रास्ता AfterTargets="Build" विफलताओं समाधान बनाता है विफल करने के लिए है?
  2. यदि नहीं, तो क्या स्वचालित रूप से यह सत्यापित करने का कोई तरीका है कि लोगों ने अपनी परियोजनाओं में AfterTargets="Build" नहीं जोड़ा?

उत्तर

0

आपको एक त्रुटि फेंक यदि स्रोत और गंतव्य की सामग्री ही नहीं हैं < कॉपी/> काम के बाद एक < त्रुटि/> जोड़ने की कोशिश की है?

संबंधित मुद्दे