2008-09-26 28 views
19

से MSEuv या NAnt बनाम DevEnv.exe का उपयोग करने के लाभों का लाभ किसी को भी बता सकता है कि MSBuild (या NAnt) जैसे टूल का उपयोग करने के लिए क्या फायदे हैं, ताकि कमांड से DevEnv.exe चल रहे प्रोजेक्ट्स का संग्रह बना सके। लाइन?कमांड-लाइन

अतीत में मैंने जो सहकर्मी काम किया था, उसने समझाया था कि (कम से कम विजुअल स्टूडियो के पुराने संस्करणों के साथ) DevEnv.exe का उपयोग करके अन्य तकनीकों की तुलना में बहुत धीमी थी, लेकिन मैंने इसका कोई सबूत नहीं पढ़ा है या नहीं अब यह एक महत्वपूर्ण मुद्दा है कि 2005 से शुरू होने पर, विजुअल स्टूडियो हुड के तहत एमएसबिल्ड का उपयोग करता है।

मुझे पता है कि एमएसबिल्ड का उपयोग करने का एक फायदा आपको बिल्डिंग मशीनों पर विजुअल स्टूडियो स्थापित करने की आवश्यकता के बिना अपनी परियोजनाओं को बनाने की अनुमति देता है, लेकिन मुझे यकीन नहीं था कि अन्य लोग हैं या नहीं।

उत्तर

16

एक कारण यह है कि इसे संकलित करने से उत्पाद बनाने के लिए और भी कुछ है। इंस्टॉलेशन बनाने, संस्करण संख्याओं को अपडेट करने, एस्क्रो बनाने, अंतिम पैकेज वितरित करने आदि जैसे कार्य, इन टूल (और उनके एक्सटेंशन) प्रदान करने के कारण बहुत आसान हो सकते हैं।

जबकि आप नियमित स्क्रिप्ट के साथ यह सब कर सकते हैं, NANT या MSBuild का उपयोग करके आप यह सब करने के लिए ठोस ढांचा देते हैं। दोनों कार्यों के लिए बहुत सारे समुदाय समर्थन हैं, जिनमें अतिरिक्त कार्य शामिल किए जा सकते हैं (जैसे MSBuild Community Tasks Project)। इसके अलावा, उनके लिए कई तृतीय पक्ष और ओपन सोर्स उत्पादों में समर्थन है।

यदि आप बस संकलित करने में रुचि रखते हैं (और पूरी बिल्ड प्रक्रिया नहीं), तो आप MSBuild का एक बार बचत लाभ support for building with multiple processors देख सकते हैं।

2

एनएएनटी या एमएसबिल्ड जैसे बाहरी निर्माण उपकरण का उपयोग करने का मुख्य कारण आपकी बिल्ड प्रक्रिया को स्वचालित करने की क्षमता है और इस प्रकार आपके सिस्टम की स्थिति पर निरंतर प्रतिक्रिया प्रदान करता है। इसके अलावा उन्हें "शुद्ध" निर्माण के अलावा चीजों के भार के लिए भी इस्तेमाल किया जा सकता है और यही वह जगह है जहां आप वास्तव में उनसे मूल्य प्राप्त करना शुरू कर देते हैं, यह एक कमांड के साथ अपने एप्लिकेशन को बनाने और परीक्षण करने में सक्षम होने के लिए एक बेहद मूल्यवान चीज है।

आप मेट्रिक्स के संग्रह, रिलीज बाइनरी के पैकिंग और इस तरह के निफ्टी सामान के सभी प्रकार जैसे सामान जोड़ने शुरू कर सकते हैं।

+0

उत्तर के लिए धन्यवाद। मैं बिल्ड प्रक्रिया को स्वचालित करने का लाभ समझता हूं, मुझे लगता है कि मैं बैच या स्क्रिप्ट फ़ाइल से DevEnv.exe को कॉल करने के विरोध में MSBuild या NAnt जैसे टूल के माध्यम से स्वचालित करने के बीच एक अंतर की तलाश में था। – afournier

0

हम DevEnv से एक टूल (विजुअल बिल्ड प्रो) में स्विच करने के साथ प्रयोग कर रहे हैं जो हुस के तहत एमएसबिल्ड का उपयोग करता है और हमें "असेंबली के लिए आवश्यक संदर्भ" सिस्टम मिला है। ड्रॉइंग ... "किसी प्रोजेक्ट के लिए त्रुटि इसकी आवश्यकता है और जो विजुअल स्टूडियो में ठीक बनाता है।

6

मेरी टीम का स्पष्ट उत्तर यह है कि किसी के पास दृश्य स्टूडियो स्थापित नहीं है, विशेष रूप से हम विजुअल स्टूडियो को हमारे निर्माण/सीआई सर्वर पर स्थापित नहीं करते हैं।

+2

बिल्ड सर्वर पर क्यों नहीं? अजीब लगता है कि आपका निर्माण आपके डेवलपर का उपयोग कर रहे एक अलग तंत्र का उपयोग करने के लिए है। विजुअल स्टूडियो समाधान परियोजना निर्भरताओं को नियंत्रित करते हैं और आपको इसे अपने निर्माण सर्वर पर मैन्युअल रूप से बनाए रखना होगा ताकि आप अपने उत्पादन के निर्माण को अलग कर सकें। –

+2

आप MSBuild के साथ एक .sln फ़ाइल बना सकते हैं ... – Schneider

+8

VS200x को स्थापित नहीं करने के लिए आपको यह पता होना चाहिए कि आपको वास्तव में एक तैनाती उत्पाद तैयार करने की आवश्यकता है। यदि आपके पास एक देव बॉक्स पर तीसरे पक्ष के उत्पादों को स्थापित किया गया है, तो वे डेवलपर बिल्ड के लिए काम कर सकते हैं। लेकिन अगर आप इसे उस मशीन पर डालते हैं जिस पर केवल एमएसबिल्ड है, तो आप पहले (बाद में) के बारे में जानेंगे कि आप कुछ थर्डपार्टी डीएलएल खो रहे हैं (और इस प्रकार वितरित करना होगा)। उर्फ, इसमें से कुछ वूडू लेता है। हमारी बिल्ड मशीन (सीसीएनईटी) को उस पर वीएस200x रखने की अनुमति नहीं है। इस प्रकार जब हम .zip या .msi तैनाती बनाते हैं, तो हम जानते हैं कि वास्तव में क्या शामिल करने की आवश्यकता है। अन्यथा, आप अनुमान लगा रहे हैं। – granadaCoder

2

जहां तक ​​सी # चला जाता है, devenv.exe 2005 कंपाइलर इन-प्रो चलाता है, जो बड़े समाधानों के लिए स्मृति अपवादों का कारण बन सकता है। प्रत्येक परियोजना के लिए csc.exe प्रक्रिया लॉन्च करने के लिए एमएसबिल्ड रिसॉर्ट्स। परियोजनाएं जो एमएसबिल्ड के साथ डेवेन/निर्माण कार्य ठीक से संकलित नहीं करती हैं। आशा है कि आपको यह कारण पसंद आएगा।

0

हमारे पास सी #, प्रबंधित सी ++, और सादे पुराने अप्रबंधित सी ++ असेंबली/डीएलएस युक्त एक बड़ी प्रणाली है। सी ++ कोड है जो प्रबंधित सी ++ कोड पर निर्भर करता है जो सी # कोड पर निर्भर करता है जो प्रबंधित सी ++ कोड पर निर्भर करता है जो सादे पुराने सी ++ कोड (whew!) पर निर्भर करता है। जब हम कुछ साल पहले हमारे स्वचालित निर्माण पर्यावरण की स्थापना कर रहे थे तो हमने पाया कि MSBuild.exe हमारे पास मौजूद सभी निर्भरताओं को सही तरीके से संभाल नहीं पाया है।

माइक्रोसॉफ्ट के साथ काम करना हम कुछ मुद्दों को हल करने में सक्षम थे लेकिन उनमें से सभी नहीं। अगर मेरी याददाश्त मेरी सेवा करती है, तो हम कभी भी सी # असेंबली नहीं प्राप्त कर सकते हैं जो प्रबंधित सी ++ डीएलएस पर निर्भर करता है।इसलिए हमने एक कस्टम बिल्ड स्क्रिप्ट बनाने के लिए समाप्त किया जिसे कमांड लाइन से devenv.exe कहा जाता है और यह ठीक काम करता है।

बेशक, यह वीएस2005 के साथ था, इसे अब तय किया जा सकता है, लेकिन स्क्रिप्ट अभी भी काम कर रही है इसलिए हमने इस मुद्दे पर फिर से विचार नहीं किया है।

+0

हमें शुद्ध देशी/सी ++ समाधान के साथ भी निर्भरताओं के संबंध में एक ही समस्या है। एमएसबिल्ड के साथ बिल्डिंग पूरी तरह से पुनर्निर्माण करते समय विश्वसनीय रूप से काम करता है; जब incremental बनाता है कुछ परियोजना निर्भरताओं को सम्मानित नहीं किया जाता है, इस पर निर्भर करता है कि कौन सी फाइलें बदली गईं। हमें शायद एक स्क्रिप्ट के अंदर devenv.exe का उपयोग करने का सहारा लेना होगा। – lesscode

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