विज़ुअल स्टूडियो में बिल्ड सॉल्यूशन, पुनर्निर्माण समाधान और क्लीन सॉल्यूशन के बीच अंतर?


1136

Visual Studio में Build Solution, Rebuild Solution और Clean Solution के बीच क्या अंतर है?

इनमें से प्रत्येक का उपयोग करने का उपयुक्त समय कब है?




2
क्या फिर से निर्माण के रूप में साफ है?
कर्नल पैनिक

@ कोलोनपेलनिक हां
एलन

जवाबों:


921
  • बिल्ड सॉल्यूशन एक वृद्धिशील बिल्ड का प्रदर्शन करेगा: अगर यह नहीं सोचता कि इसे किसी परियोजना को फिर से बनाने की जरूरत है, तो यह नहीं होगा। यदि वे परिवर्तित नहीं हुए हैं तो परियोजना के आंशिक रूप से निर्मित बिट्स का उपयोग भी कर सकते हैं (मुझे नहीं पता कि इसमें कितना समय लगता है)
  • पुनर्निर्माण समाधान साफ हो जाएगा और फिर खरोंच से समाधान का निर्माण होगा, जो कुछ भी पहले किया गया है उसे अनदेखा करना। इस और "क्लीन, उसके बाद बिल्ड" के बीच का अंतर यह है कि पुनर्निर्माण प्रत्येक प्रोजेक्ट को साफ करेगा, एक बार में, सभी को साफ करने के बजाय और फिर सभी का निर्माण करेगा।
  • स्वच्छ समाधान पिछले निर्माण से निर्माण कलाकृतियों को हटा देगा। यदि बिल्ड टारगेट डायरेक्टरीज़ (बिन और ओबज) में कोई अन्य फाइलें हैं, तो उन्हें हटाया नहीं जा सकता है, लेकिन वास्तविक बिल्ड कलाकृतियां हैं। मैंने इस भिन्नता के लिए व्यवहार देखा है - कभी-कभी पूरी तरह से हटाते हुए और कभी-कभी नहीं - लेकिन मैं वीएस को इस समय के लिए संदेह का लाभ दूंगा :)

(लिंक devenv.exe कमांड लाइन स्विच पर हैं, लेकिन वे मेनू आइटम के समान ही करते हैं।)


2
@womp: इस परियोजना में नहीं जो मैं अभी देख रहा हूं। यह अभी भी सभी विधानसभाओं में है ...
जॉन स्कीट

1
@ जॉन - अजीब। मुझे उन निर्देशिकाओं को साफ न करने वाली एक सफाई याद नहीं है। मैं अभी कर रहा हूँ और यह सभी .dll और .pdb फ़ाइलों को मिटा रहा है। निश्चित रूप से मेरे ReSharper कबाड़ को अकेला छोड़ देता है।
womp

156
मैंने व्यक्तिगत रूप से "क्लीन सोल्यूशन" को अनहेल्दी से अधिक पाया है। अगर मैं वास्तव में इसे साफ करना चाहता हूं , तो मैन्युअल रूप से बिन और obj फ़ोल्डर्स को हटाने का तरीका है। यहां तक ​​कि प्रेत "त्रुटियों" का पीछा करते हुए पकड़े गए हैं - जब तक कि मैंने ऐसा नहीं किया। साफ सिर्फ विश्वसनीय नहीं है।
क्रिस रोजर्स

7
यदि कलाकृतियों ने बिल्ड कलाकृतियों के माध्यम से अन्य माध्यमों से अपना रास्ता बनाया (उदाहरण के लिए एक अन्य स्रोत से प्रतिलिपि कॉपी करें जो कि cproj में एक msbuidltask के रूप में एकीकृत है) तो उन्हें साफ छोड़ दें। जो इसे बहुत बेकार बनाता है, मैं यह भी कहूंगा कि यह खतरनाक है क्योंकि यह आपको सफाई की झूठी भावना के साथ छोड़ देगा।
न्यूटोपियन

4
@verdana: github आदि के लिए, एक सभ्य .gitignoreफ़ाइल रखना सरल है । लेकिन जवाब के अनुसार, क्लीन हमेशा मेरे अनुभव में एक विशेष रूप से पूरी तरह से काम नहीं करता है।
जॉन स्कीट

455

बिल्ड सोल्यूशन: कंपाइल कोड फाइल्स (DLL और EXE) जो बदली जाती हैं।

पुनर्निर्माण: सभी संकलित फ़ाइलों को हटाता है और उन्हें फिर से संकलित करता है चाहे कोड बदल गया हो या नहीं।

स्वच्छ समाधान: सभी संकलित फ़ाइलों (DLL और EXE फ़ाइल) को हटाता है।

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

निर्माण बनाम पुनर्निर्माण

पुनर्निर्माण बनाम (क्लीन + बिल्ड) के बीच का अंतर, क्योंकि ऐसा लगता है कि इसके आसपास भी कुछ भ्रम है:

अंतर यह है कि निर्माण और स्वच्छ अनुक्रम हर परियोजना के लिए होता है। मान लीजिए कि आपके समाधान में दो परियोजनाएं हैं, "proj1" और "proj2"। यदि आप एक पुनर्निर्माण करते हैं, तो यह "proj1" लेगा, "proj1" के लिए संकलित फ़ाइलों को साफ (हटाएं) और इसका निर्माण करेगा। उसके बाद यह दूसरी परियोजना "proj2" लेगा, "proj2" के लिए स्वच्छ संकलित फ़ाइलें और "proj2" संकलित करें।

लेकिन अगर आप एक "क्लीन" और बिल्ड "करते हैं, तो यह पहले" proj1 "और" proj2 "के लिए सभी संकलित फ़ाइलों को हटा देगा और फिर यह" proj1 "का निर्माण करेगा और उसके बाद" proj2 "होगा।

बनाम स्वच्छ पुनर्निर्माण


26
यह समझाने के लिए धन्यवाद कि पुनर्निर्माण क्यों हमेशा काम नहीं करता है और निर्माण करने से पहले मुझे अक्सर सफाई करने की आवश्यकता होती है।
डिडियर ए।

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

@JonCoombs हाँ, मुझे नहीं लगता कि पहले फ़्लोचार्ट ने वीडियो पर जो कहा था, उसे वास्तव में कैप्चर किया है। मुझे लगता है कि मैंने जो छवि डाली है वह शिवप्रसाद का लक्ष्य था।
रफिन

जैसा कि मैं यह समझता हूं, यदि कोई फ़ाइल बदल गई है, तो परियोजना को एक नियमित बिल्ड पर साफ किया जाता है, जिसका अर्थ है कि यह या तो कुछ नहीं करेगा या यह प्रोजेक्ट को साफ करेगा और फिर निर्माण करेगा। क्या ये सही है?
क्लीयर

147

इस लिंक से लिया गया :

बिल्ड का मतलब केवल उन स्रोत फ़ाइलों को संकलित और लिंक करना है जो पिछले बिल्ड के बाद बदल गए हैं, जबकि पुनर्निर्माण का मतलब है कि वे बदले या नहीं, सभी सोर्स फाइलों को संकलित करें और लिंक करें। बिल्ड करना सामान्य बात है और तेज है। कभी-कभी प्रोजेक्ट लक्ष्य घटकों के संस्करण सिंक से बाहर निकल सकते हैं और बिल्ड को सफल बनाने के लिए पुनर्निर्माण आवश्यक है। व्यवहार में, आपको कभी भी सफाई करने की आवश्यकता नहीं है।



1
संपर्क? मुझे लगा कि DLL, उर्फ ​​डायनेमिक लिंक लाइब्रेरी का विचार रनटाइम पर लिंक करना था?
द डीग

7
"व्यवहार में आपको कभी भी सफाई करने की आवश्यकता नहीं है" <- मैं बीएस को इस पर कॉल करता हूं।
piers7

2
piers7 क्या आप फिर से एक ऐसा कारण प्रदान कर सकते हैं जिसे आपको बनाम पुनर्निर्माण करने की आवश्यकता होगी?
पॉलबिंदर


46

बिल्ड सॉल्यूशन - किसी भी असेंबली को बनाता है जिसने फाइलें बदली हैं। यदि किसी असेंबली में कोई परिवर्तन नहीं है, तो इसे फिर से नहीं बनाया जाएगा। इसके अलावा किसी भी मध्यवर्ती फ़ाइलों को नष्ट नहीं करेगा।

सबसे अधिक उपयोग किया जाता है।

समाधान का पुनर्निर्माण - परिवर्तनों की परवाह किए बिना सभी विधानसभाओं का पुनर्निर्माण करता है लेकिन मध्यवर्ती फ़ाइलों को छोड़ देता है।

जब आप देखते हैं कि विज़ुअल स्टूडियो ने नवीनतम असेंबली में आपके परिवर्तनों को शामिल नहीं किया है, तो इसका उपयोग किया जाता है। कभी-कभी Visual Studio गलतियाँ करता है।

क्लीन सॉल्यूशन - सभी इंटरमीडिएट फाइल्स को डिलीट करें।

अन्य सभी विफल होने पर उपयोग किया जाता है और आपको सब कुछ साफ करने और नए सिरे से शुरू करने की आवश्यकता होती है।


25
स्वच्छ एक निर्माण नहीं करता है।
जॉन स्कीट

3
@ जीन स्कीट - हर दिन कुछ नया सीखें। मैंने शपथ ली थी कि इसका पुनर्निर्माण होगा। मुझे लगता है कि मेरी स्मृति हमेशा उतनी विश्वसनीय नहीं है जितनी मैं चाहूंगा।
जस्टिन निस्नेर

16

मैं सिर्फ बिल्ड बनाने के बाद सबसे पहले क्लीन परफॉर्म कर रहा हूं। शायद मैं गलत हूं ... टिप्पणियां?


इसका कोई अपवाह नहीं था (अब तक) और डॉक्स के अनुसार (जॉन के जवाब में लिंक देखें) यह बिल्कुल सही है।
टॉड

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

@Cututu शिवप्रसाद के विवरण के लिए देखें कि यहां क्या अंतर है। क्लीन का पुनर्निर्माण करें और फिर एक बार में प्रत्येक व्यक्तिगत प्रोजेक्ट का निर्माण करें, जबकि क्लीन क्लीन चल रहा है एक बार में सब कुछ साफ कर देता है, फिर बिल्ड एक ही बार में सभी बनाता है। मैंने ऐसे उदाहरणों को चलाया है जहाँ स्वच्छ / निर्माण क्रम में यह परिवर्तन संकलन और संकलन न करने के बीच का अंतर बनाता है।
शॉन

@ सीन शायद यह आपके समाधान में किसी प्रोजेक्ट को जोड़ने के कारण हुआ था, इसलिए प्रोजेक्ट बिल्ड ऑर्डर के file referenceबजाय project referenceयह नहीं पहचाना गया कि उसे एक निश्चित प्रोजेक्ट को दूसरे से पहले बनाना था, और असेंबली का अस्तित्व नहीं था, जहां उसके दौरान होना चाहिए निर्माण?
जक

14

बिल्ड सॉल्यूशन - किसी भी असेंबली को बनाता है जिसने फाइलें बदली हैं। यदि किसी असेंबली में कोई परिवर्तन नहीं है, तो इसे फिर से नहीं बनाया जाएगा। इसके अलावा किसी भी मध्यवर्ती फ़ाइलों को नष्ट नहीं करेगा।

पुनर्निर्माण समाधान साफ हो जाएगा और फिर खरोंच से समाधान का निर्माण होगा, जो कुछ भी पहले किया गया है उसे अनदेखा करना

क्लीन सॉल्यूशन सभी संकलित फाइलों (जैसे, EXE's और DLL के) को बिन / obj डायरेक्टरी से हटा देगा।


8

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


6

समाधान बनाएँ - बिल्ड सॉल्यूशन आपके एप्लिकेशन को उन प्रोजेक्ट्स के निर्माण के साथ बनाएगा जो किसी भी फाइल में बदलाव कर रहे हैं। और यह किसी भी मौजूदा बाइनरी फाइलों को साफ नहीं करता है और सिर्फ बिन या ओबीजी फ़ोल्डर में अद्यतन असेंबली की जगह ले रहा है।

समाधान का पुनर्निर्माण करें - पुनर्निर्माण समाधान आपके संपूर्ण एप्लिकेशन को आपके समाधान में उपलब्ध सभी परियोजनाओं के निर्माण के साथ उनकी सफाई के साथ बनाएगा। इसे बनाने से पहले बिन और obj फ़ोल्डर से सभी बाइनरी फ़ाइलों को साफ करता है।

क्लीन सॉल्यूशन - क्लीन सॉल्यूशन बिन और ओबीजी फोल्डर से सभी बाइनरी फाइलों को साफ करता है।


5

समाधान बनाएँ

यह एक वृद्धिशील निर्माण का प्रदर्शन करेगा। दूसरे शब्दों में यह केवल कोड फ़ाइलों का निर्माण करेगा जो बदल गए हैं। यदि उन्होंने नहीं बदला है तो उन फाइलों को नहीं छुआ जाएगा।

समाधान का पुनर्निर्माण करें

यह वर्तमान में संकलित सभी फ़ाइलों (जैसे, exe और DLL) को हटा देगा और सब कुछ खरोंच से बना देगा, भले ही फ़ाइल में कोड परिवर्तन हो या न हो।

स्वच्छ समाधान मेनू

यह मेनू बिन / obj निर्देशिका से सभी संकलित फ़ाइलों (यानी, EXE और DLL के) को हटा देगा।

पुनर्निर्माण = स्वच्छ + निर्माण


4

एक मुख्य बात जो मुझे लगता है कि लोग छोड़ रहे हैं, वह यह है कि बिल्ड और क्लीन दोनों ऐसे कार्य हैं जो आपके प्रोजेक्ट / समाधान के दृश्य स्टूडियो के ज्ञान के आधार पर किए जाते हैं। मैं बहुत सारी शिकायतें देखता हूं कि क्लीन काम नहीं करता है या बचे हुए फ़ाइलों को छोड़ देता है या भरोसेमंद नहीं है, जब वास्तव में, आपके द्वारा कहे जाने वाले कारण वास्तव में विश्वसनीय नहीं होते हैं।

क्लीन केवल क्लीन (साफ) फाइलों और / या निर्देशिकाओं को हटा देगा जो कि विजुअल स्टूडियो या कंपाइलर वास्तव में बनाए हैं। यदि आप अपनी फ़ाइलों या फ़ाइलों / फ़ोल्डर संरचनाओं की प्रतिलिपि किसी बाहरी टूल या स्रोत से बनाते हैं, तो विज़ुअल स्टूडियो "वे मौजूद हैं" नहीं जानते हैं और इसलिए, उन्हें स्पर्श नहीं करना चाहिए।

क्या आप कल्पना कर सकते हैं कि क्लीन ऑपरेशन ने मूल रूप से "डेल *। *" का प्रदर्शन किया है? यह भयावह हो सकता है।

बिल्ड परिवर्तित या आवश्यक परियोजनाओं पर एक संकलन करता है।

पुनर्निर्माण परिवर्तन की परवाह किए बिना या आवश्यक क्या है एक संकलन करता है।

स्वच्छ अतीत में बनाई गई फ़ाइलों / फ़ोल्डरों को हटा देता है, लेकिन कुछ भी छोड़ देता है जो शुरू में इसके साथ कुछ भी नहीं करता था।

मुझे उम्मीद है कि यह थोड़ा विस्तार करता है और मदद करता है।


4

मैं आ खाली समाधान है BuildRebuildCleanऔर तीन वर्ग पुस्तकालय Models, Repository, Notification

मैं का उपयोग करें Modelsऔर Repositoryमें Notificationवर्ग पुस्तकालय।

फिर:

  • समाधान बनाएँ इंक्रीमेंटल बिल्ड और केवल परिवर्तित फ़ाइलों को संकलित करता है। यदि किसी असेंबली में कोई परिवर्तन नहीं है, तो इसे फिर से नहीं बनाया जाएगा। इसके अलावा, यह किसी भी मध्यवर्ती फ़ाइलों को नष्ट नहीं करेगा। यदि Modelsलाइब्रेरी प्रोजेक्ट में कुछ कोड संशोधित करें , तो BUILD समाधान। नीचे दिए गए स्क्रीन शॉट में, DLL के टाइम स्टैम्प को देखें, EXE को Modelsऔर Notificationलाइब्रेरी में अपडेट किया गया है।

यहां छवि विवरण दर्ज करें

  • समाधान का पुनर्निर्माण सभी संकलित फ़ाइलों को हटाता है और परिवर्तनों की सभी परवाह किए बिना संकलित करता है, इससे पहले कि यह कुछ भी हो, की अनदेखी करता है। समाधान के नाम पर राइट क्लिक करें BuildRebuildClean। यह क्या करता है सभी विधानसभाओं, EXE और संदर्भित फ़ाइलों को फिर से संकलित करने के लिए हटा दिया जाता है।

यहां छवि विवरण दर्ज करें

  • स्वच्छ समाधान सभी संकलित, मध्यवर्ती फ़ाइलों (जैसे, EXEs और DLL) को बिन / obj निर्देशिका से हटाता है।

यहां छवि विवरण दर्ज करें


2

मुझे पता है कि एक क्लीन ऐसा नहीं करता है जो "क्लीन बनाने के लिए" करता है - अगर मैं एक सॉल्यूशन को क्लीन करता हूं, तो मैं उम्मीद करूंगा कि वह obj और बिन फाइल्स / फोल्डर को डिलीट कर दे, जैसे कि वह बनाता है, वैसे ही यह सोर्स का फ्रेश चेकआउट था। मेरे अनुभव में हालांकि मुझे अक्सर ऐसा समय मिलता है जहां एक स्वच्छ और निर्माण या पुनर्निर्माण अभी भी स्रोत पर अजीब त्रुटियां पैदा करता है जो संकलन करने के लिए जाना जाता है और जो आवश्यक है वह बिन / obj फ़ोल्डरों का मैन्युअल विलोपन है, फिर यह निर्माण करेगा।


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

1

समाधान बनाएँ केवल उन परियोजनाओं को बनाता है जो समाधान में बदल गए हैं, और उन विधानसभाओं को प्रभावित नहीं करते हैं जो बदल नहीं गए हैं,

रिबल्ड पहले समाधान से सभी विधानसभाओं को साफ करता है, और फिर किए गए परिवर्तनों की परवाह किए बिना पूरे समाधान का निर्माण करता है।

साफ, बस समाधान साफ।



0

यह केवल "बिल्ड सॉल्यूशन" विकल्प के विषय में है।

मैं वास्तव में साफ समाधान के लिए विजुअल स्टूडियो की अक्षमता से पूरी तरह से तंग आ गया और इस छोटे से उपकरण को लिखा जो आपके लिए ऐसा करेगा।

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

यहां छवि विवरण दर्ज करें

संक्षेप में, यह सभी "डीबग" फ़ोल्डरों, इन्टेलिसेंस और अन्य कैश को जगह देगा, जिन्हें वीएस द्वारा आपके लिए रीसायकल बिन में फिर से बनाया जा सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.