2010-01-02 14 views
75

विजुअल स्टूडियो 2008 मुझे एक कमांड घोषित करने देता है और इसे एक परियोजना के लिए पोस्ट-बिल्ड इवेंट में संलग्न करता है। कई डेवलपर्स की तरह, मैं इसे नियमित रूप से अनुप्रयोग आउटपुट निर्देशिका में फ़ाइलों को xcopy करने के लिए उपयोग करता हूं।विजुअल स्टूडियो: एकाधिक पोस्ट-बिल्ड कमांड?

मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जहां मुझे दो अलग-अलग स्थानों से दो अलग-अलग स्थानों पर फ़ाइलों को एक्सकॉपी करने की आवश्यकता है, सभी एक ही परियोजना के भीतर। दूसरे शब्दों में, मुझे उसी पोस्ट-बिल्ड ईवेंट से दो अलग-अलग xcopy आदेशों को आमंत्रित करने की आवश्यकता है। ऐसा लगता है कि पोस्ट-बिल्ड इवेंट केवल एक ही कमांड लेगा, और यदि मुझे एकाधिक कमांड का आह्वान करने की आवश्यकता है, तो मुझे कमांड को * .bat फ़ाइल में रखना होगा और पोस्ट-बिल्ड इवेंट से कॉल करना होगा।

क्या यह सही है, या क्या पोस्ट-बिल्ड इवेंट से दो आदेशों का आह्वान करने का एक आसान तरीका है? आपकी सहायता के लिये पहले से ही धन्यवाद।

उत्तर

100

आप जितना चाहें उतने पोस्ट बिल्ड कमांड टाइप कर सकते हैं। बस उन्हें नई लाइनों से अलग करें।

यहां मेरी एक परियोजना से एक उदाहरण है।

Post Build Event Commandline

+2

स्क्रीन-शॉट सहित केवल तभी उपयोगी होता है जब आप इसे हमेशा होस्ट करना चाहते हैं। – OWenJ23

+1

@ ओवेनजे 23 ... या 'इमेजहाक' इस मामले में;) –

+11

अलग-अलग लाइनों पर होने के बावजूद, मेरे आदेश एक साथ चल रहे हैं जैसे कि वे एक ही पंक्ति पर थे। – Trevor

10

प्रत्येक आदेश एक अलग लाइन पर होना चाहिए। हालांकि मुझे जो मिला वह यह है कि यदि उन आदेशों में से किसी एक को निष्पादित करने में त्रुटि हुई है तो पूरे पोस्ट-बिल्ड विफल हो जाते हैं और इसलिए आपको डीबग करने के लिए एक बार प्रत्येक पोस्ट-बिल्ड कमांड को आजमाने की आवश्यकता होगी।

+2

"xcopy/f" पूर्ण स्रोत और लक्ष्य फ़ाइल नाम दिखाएगा, जो विफलता से पहले मुद्रित किया जाएगा, एकाधिक कॉपी आदेशों की तुलना में एकाधिक xcopy आदेशों का निदान करना आसान हो जाएगा। – yoyo

87

महत्वपूर्ण: बैच फ़ाइल निष्पादित करते समय, आपको निम्न पंक्तियों को निष्पादित करने के क्रम में "कॉल" कथन का उपयोग करना होगा। यदि आप "कॉल" का उपयोग नहीं करते हैं, तो निष्पादन .bat में जाता है और निम्न पंक्तियों पर वापस नहीं आता है। डॉस प्रॉम्प्ट पर ही।

उदा .:

call MyBatch1.bat 
call MyBatch2.bat 
+4

+1 धन्यवाद। इससे मुझे कुछ दुख हुआ जो मैं अनुभव कर रहा था। – Bernard

+0

धन्यवाद !!! यह ठीक वही है जिसकी मुझे तलाश थी! मेरे द्वारा –

+1

+1 भी। पूरी तरह से उस विवरण के बारे में भूल गए और मेरे बालों को खींच रहा था। – Greg

10

एक और विकल्प नहीं है: आप && साथ आदेशों को अलग कर सकते हैं। ईजी। && साथ, अगर पिछला आदेश में विफल रहा है, अगले commant नहीं चलेंगे:

copy $(TargetPath) d:\folder1 && copy $(TargetPath) d:\folder2

यह ठीक नई-पंक्तियों से अलग करते हुए के रूप में ही नहीं है।

न्यूलाइन द्वारा अलग करना पढ़ने में आसान है, इसलिए आपको इसे प्राथमिकता देना चाहिए। हालांकि मुझे कम से कम एक मामला पता है जब && उपयोगी है। यह परिदृश्य है, जब आप विभिन्न मशीनों पर अलग-अलग पोस्ट-बिल्ड चरणों के लिए संपत्ति पत्रक का उपयोग करते हैं। वीएस 2008 सीधे संपत्ति शीट में PostBuildStep को सेट करने की अनुमति नहीं देता है, लेकिन आप अपने कमांड के साथ एक उपयोगकर्ता मैक्रो जोड़ सकते हैं और इसे मुख्य प्रोजेक्ट सेटिंग्स से कॉल कर सकते हैं। एक मैक्रो एकल रेखा है, इसलिए आप वहां कई कमांड रखने के लिए && का उपयोग कर सकते हैं।

-2

बस अपनी बैच स्क्रिप्ट पर "कॉल" उपसर्ग करें। इसलिए बैच स्क्रिप्ट से कॉल वापस करने के बाद बैच स्क्रिप्ट के नीचे दिए गए बयान भी निष्पादित किए जाते हैं।

call Script1.cmd 
call Script2.bat 
+5

यह उत्तर पहले से ही 2 साल पहले दिया गया है। –

5

को जोड़ना womp के answer:

%(Command) 
echo foo 

:

आप कुछ के साथ कई संपत्ति पत्रक एक ही निर्माण घटना आप श्रृंखला के लिए निम्न कमांड कर सकते हैं पर क्या करना है, तो जहां %(Command) कमांड के पिछले मान तक फैलता है।

व्यक्तिगत तौर पर मैं सभी निर्माण की घटनाओं के लिए ऐसा करते हैं, यहां तक ​​कि अगर मैं वर्तमान विरासत में मिला आदेशों की जरूरत नहीं है, क्योंकि यह सुनिश्चित करता है वहाँ कोई समस्या नहीं हो सकता है अगर मैं बाद में संपत्ति शीट जोड़ें।

+0

यह कस्टम बिल्ड चरण के साथ भी काम करता है। इसके अलावा, चेन के साथ कहीं भी 'निकास' बैच स्टेटमेंट निष्पादित करने से चेन को निरस्त कर दिया जाता है। दरअसल 'बाहर निकलें 1' निर्माण को विफल होने का कारण बनता है जबकि 'बाहर निकलें 0' बस चरण को रोकता है और निर्माण जारी रहता है। –

0

विजुअल स्टूडियो 2015/2017 (विंडोज) में गर्भ कार्यों द्वारा सुझाए गए दृष्टिकोण, लेकिन मैक (पूर्वावलोकन) के लिए विजुअल स्टूडियो में काम नहीं करता है, जो केवल आदेशों में से पहला निष्पादित करता है। केवल दृष्टिकोण है कि मैं दोनों मैक और Windows दृश्य स्टूडियो के संस्करणों में काम कर पाया 2 चेनिंग था MSBuild आदेश:

<Target Name="AfterResolveReferences"> 
<Exec Command="path\MyFirstCommand.exe -parameters" /> 
</Target> 
<Target Name="MySecondCommand" AfterTargets="AfterResolveReferences" > 
<Exec Command="path\MySecondCommand.exe -parameters" /> 
</Target> 

ऊपर के उदाहरण "AfterResolveReferences" घटना का उपयोग करता है लेकिन स्पष्ट रूप से PostBuild घटना के लिए भी काम करना चाहिए।

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