2015-05-26 6 views
5

मेरे पास एकाधिक निर्देशिकाओं में बहुत सारे विजुअल स्टूडियो प्रोजेक्ट सॉल्यूशंस हैं (सभी एक्सटेंशन। एसएलएन के साथ) और मैं एक साधारण बैच स्क्रिप्ट लिखना चाहता हूं जो बैच फ़ाइल में सूचीबद्ध सभी समाधान स्वचालित रूप से तैयार करेगी।कमांड लाइन से विजुअल स्टूडियो के लिए सरल बिल्ड स्क्रिप्ट कैसे बनाएं?

मैं मैन्युअल रूप से शुरू करके एक समाधान का निर्माण करने में सक्षम हूँ Visual Studio Command Prompt (जो निम्न आदेश के साथ सिर्फ एक कमांड लाइन उदाहरण निष्पादित

"%comspec%" /k "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86

जो बाद मैं तो फोन करके परियोजना का निर्माण होता है:

devenv "path\to\solutionFile\projectSolution1.sln" /build Debug

इस परियोजना (परियोजना संभालने त्रुटि नहीं है) का निर्माण करेगा और मैं कुल्ला और प्रत्येक परियोजना bui मैं चाहता हूँ के लिए दोहराएँ ली।

हालांकि मेरे पास है जब एक बैच फ़ाइल में निम्न build.bat कहा जाता है:

"%comspec%" /k "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 
echo "Starting Build for all Projects with proposed changes" 
echo . 
devenv "path\to\solutionFile\projectSolution2.sln" /build Debug 
devenv "another\path\to\solutionFile\projectSolution3.sln" /build Debug 
devenv "yet\another\path\to\solutionFile\projectSolution4.sln" /build Debug 
echo "All builds completed." 
pause 

बैच स्क्रिप्ट केवल पहली पंक्ति कार्यान्वित करता है, और प्रतीक्षा करता है जब तक मैं दूसरों को क्रियान्वित करने से पहले exit में टाइप करें। बैच फाइलों पर किए गए शोध के आधार पर इसकी मेरी समझ और सभी स्टैक ओवरफ्लो प्रश्न यह है कि cmd वास्तव में स्वयं का एक और उदाहरण आमंत्रित करता है जो निर्माण वातावरण को स्थापित करने के लिए vcvarsall.bat निष्पादित करता है।

यह exit टाइपिंग के रूप में काम नहीं करेगा devenv साथ कि उदाहरण की स्थापना की और उसके बाद आदेशों devenv के रूप में निष्पादित नहीं कर सकता को मारता है नहीं किसी मान्यता प्राप्त आदेश (के बाद से निर्यात पथ अब मौजूद नहीं होगा)

कम में , यह एक बैच फ़ाइल में devenv परिभाषित के साथ cmd उदाहरण के बाकी हिस्सों में गुजरने के लिए कैसे प्राप्त किया जा सकता है? मैं समझता हूं कि यह एक मजबूत तरीका नहीं है (और ऐसे कई टूल हैं जो इसे करते हैं) का निर्माण करने के लिए, लेकिन मैं उम्मीद कर रहा हूं कि इन परियोजनाओं को व्यक्तिगत रूप से कॉल करने के मैन्युअल काम को स्वचालित करने के लिए एक बैच स्क्रिप्ट प्राप्त हो।

उत्तर

8

जिमी द्वारा नोट किया गया समाधान मिला, किसी को पर्यावरण परिवर्तनीय %comspec% को हटाने की आवश्यकता है क्योंकि यह CMD.exe का शॉर्टकट है।

हालांकि, "%comspec" /k को हटाकर एक सीएमडी इंस्टेंस खोलने का कारण बन जाएगा और फिर एक सेकंड के बाद बाहर निकल जाएगा।मैं भी पहले से call समारोह जो एक अलग सीएमडी उदाहरण है जब %comspec%

समाधान के साथ प्रयोग किया को पहली पंक्ति के सामने call जोड़ने के लिए, और हटाने %comspec

यहाँ अंतिम बैच फ़ाइल है बनाया करने की कोशिश की है कि इरादे के रूप में काम कर रहे चीजें मिल गई।

@echo OFF 
call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 
echo "Starting Build for all Projects with proposed changes" 
echo . 
devenv "path\to\solutionFile\projectSolution2.sln" /build Debug 
devenv "another\path\to\solutionFile\projectSolution3.sln" /build Debug 
devenv "yet\another\path\to\solutionFile\projectSolution4.sln" /build Debug 
echo . 
echo "All builds completed." 
pause 

ध्यान दें कि @echo OFF बैच स्क्रिप्ट बताता है (जैसे कि कॉल आदेश के रूप में) आदेशों टर्मिनल में बाहर गूंज नहीं करने के लिए (त्रुटियों और चेतावनियों अभी भी दिखाए जाएंगे, हालांकि)

+1

मैं स्क्रिप्ट और ध्यान का परीक्षण किया कि 'कॉल "..." x86' लाइन एक नई लाइन पर होनी चाहिए। मैंने कोड को संपादित करने की कोशिश की, लेकिन SO को कम से कम 6 वर्ण परिवर्तनों की आवश्यकता है ... :-( –

+0

@ मार्टनडॉक्टर अच्छा पकड़, धन्यवाद! मैंने इसे अपडेट किया है। जब मैं एक वीएम के माध्यम से पेस्ट कॉपी करता हूं तो कोड स्वरूपण खराब हो जाता है। :( – matrixanomaly

+0

बढ़िया! संपादन के लिए धन्यवाद! –

2

यदि यह तो इस लाइन एक बैच लिपि में पहले से ही है,:

"%comspec%" /k "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 

शायद सिर्फ होना चाहिए "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86

क्यों? %comspec% cmd.exe के लिए केवल एक पर्यावरण परिवर्तनीय शॉर्टकट है, जैसा कि आपने देखा है, यह/k विकल्प निर्दिष्ट के साथ cmd का एक नया उदाहरण लॉन्च कर रहा है (यदि आप cmd /? चलाते हैं Carries out the command specified by string but remains)। आप इसके बारे में परवाह नहीं करते हैं, आप एक नई cmd.exe भी नहीं चाहते हैं जब आप पहले से ही अपनी बैच फ़ाइल चला रहे हों।

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