2008-10-23 15 views
5

हमारे पर्यावरण में हमारे पास एक लिब फ़ोल्डर है जिसमें हमारी परियोजनाओं द्वारा संदर्भित विभिन्न तृतीय पक्ष असेंबली शामिल हैं। उदाहरण के लिए, एंटरप्राइज़ लिबरी और एल्मा।दृश्य स्टूडियो को असेंबली संदर्भों को अपडेट करने से कैसे रोकें?

कभी-कभी एक देव उस फ़ोल्डर पर नवीनतम नहीं मिलता है। जब देव तब एक प्रोजेक्ट लोड करता है जो अपेक्षित फ़ोल्डर में असेंबली नहीं पाता है, तो विजुअल स्टूडियो स्वचालित रूप से दूसरी प्रतिलिपि ढूंढता है और परियोजना संदर्भों को अपडेट करता है।

समस्या तब होती है जब देव परियोजना में जांच करता है और यह हर किसी को खराब करता है।

क्या दृश्य स्टूडियो 2008 को ऐसा करने से रोकने का कोई तरीका है?

अद्यतन: मैं जोड़ना चाहता था कि हम स्रोत नियंत्रण के लिए टीएफएस का उपयोग कर रहे हैं।

+0

हाँ, यह बेकार है, यही कारण है कि मैंने कभी भी जीएसी में कुछ भी नहीं रखा। –

+0

यह भी लगता है कि समस्या आपके देवताओं के साथ है, हो सकता है कि आप उन्हें यह गलती न करने के लिए कुछ भी कर सकें - हर बार कोई यह गलती करता है कि वह 5 डॉलर का भुगतान करता है - इससे उन्हें याद रखने में मदद करनी चाहिए :) –

+0

मुख्य मुद्दा था DevExpress नियंत्रण जैसे GAC'd असेंबली के साथ। हमने तृतीय पक्ष असेंबली के साथ lib फ़ोल्डर को अपडेट करने के लिए 1 व्यक्ति को जिम्मेदार ठहराया और किसी और को स्थापित करने की अनुमति नहीं दी गई। उन नियंत्रणों के लिए दर्द का प्रकार, लेकिन यह काम किया। – NotMe

उत्तर

4

यहां बताया गया है कि हम अपनी कंपनी में इसके खिलाफ कैसे रक्षा करते हैं। (आपका लाभ भिन्न होगी!)

किसी भी गैर-प्रणाली (या अन्यथा गैर GAC) संदर्भ हमारे डेव सर्वर है, जो हर डेवलपर उनके डब्ल्यू को मैप किया गया है से आते हैं: ड्राइव। हमारे पास एक सामान्य DLL निर्देशिका है, जिसमें क्लाइंट (या विक्रेता) द्वारा उपनिर्देशिकाएं, और आगे की उप-निर्देशिकाएं उचित हैं। कोई डीएलएल कभी स्रोत नियंत्रण में संग्रहीत है, कभी-कभी इन्फ्राजिस्टिक्स द्वारा आवश्यकतानुसार license.dll को छोड़कर।

विक्रेता-प्रदान की पुस्तकालयों (EntLib, Infragistics, आदि) के लिए, नीति के रूप में हम डब्ल्यू से संदर्भ: ड्राइव। अवधि। कहीं भी किसी और से संदर्भ देने के लिए अधिकृत नहीं है। यह प्रोजेक्ट फ़ाइलों में संकेत को एक सामान्य पथ पर संकेत देता है।

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

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

यह करने के लिए चाल एक स्थिर, repeatable निर्माण प्रक्रिया और एक सतत एकीकरण सर्वर है। हम CruiseControl.NET का उपयोग कर रहे हैं, NAnt के साथ एकीकृत है, लेकिन अपने पसंदीदा सीआई सर्वर डालें और यहां टूल बनाएं।

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

बस कुछ विचार ... इस तकनीक को लोगों को आपके स्रोत नियंत्रण को खराब करने से रोकना चाहिए - और एक अतिरिक्त बोनस के रूप में, अपने स्रोत नियंत्रण के आकार को कम करें क्योंकि आप डीएलएल में जांच नहीं करेंगे, बस dll.refresh फ़ाइलें।

+0

ऐसा लगता है कि यह ज्यादातर सही उत्तर है। हम टीएफएस का उपयोग कर रहे हैं, और मुझे फोर्बिडन पटरर्न पॉलिसी मिली है जो चेकइन पर फाइलों को देख सकती है। धन्यवाद! – NotMe

+0

कोई समस्या नहीं! उम्मीद करते है कि यह आपके लिए काम करें! –

1

मुझे नहीं लगता कि यह संभव है।

आप किसी पाठ संपादक में एक परियोजना फ़ाइल खोलते हैं, तो आपको लगता है कि दृश्य स्टूडियो विधानसभाओं के लिए कड़ी मेहनत के संदर्भ की दुकान नहीं है देखेंगे लेकिन यह एक "HintPath" के बजाय संग्रहीत करता है। यदि संदर्भ नहीं मिला है तो दृश्य स्टूडियो स्वचालित रूप से जीएसी का प्रयास करेगा।

यह (यदि आप पहले एक भी नहीं है) एक सतत एकीकरण सर्वर स्थापित करने के लिए इस तरह की स्थितियों के लिए यह एक पूर्व चेतावनी प्रणाली के रूप में कार्य करेगा एक अच्छा विचार हो सकता है।

+0

टीमसिटी 20 उपयोगकर्ताओं तक और 20 बिल्डों के लिए नि: शुल्क है। मैं वर्तमान में इसका उपयोग कर रहा हूं, और यह बहुत अच्छा है। – MrBoJangles

+0

हमारे पास सीआई स्थापित है। असल में मैं अपने देव पर्यावरण की एक बड़ी गड़बड़ी की सफाई की प्रक्रिया में हूं जिसमें किसी ने बिल्ड सर्वर पर उन सभी असेंबली को हासिल किया है। समस्या यह है कि, कुछ ऐप्स यहां विभिन्न संस्करणों का उपयोग करते हैं जो उत्पादन तक पहुंचने में अधिक समस्याएं पैदा करते हैं। – NotMe

+0

हालांकि, मुझे लगता है कि मेरा अगला कदम बिल्ड सर्वर को साफ करना है - धन्यवाद। – NotMe

2

मैं अपने डीएलएस को स्रोत नियंत्रण में डालने के अपवाद के साथ जॉन के साथ सबसे अधिक अंक पर सहमत हूं।

मेरे पास आमतौर पर एक थर्डपार्टी फ़ोल्डर होता है जिसमें विक्रेता उत्पाद और संस्करण टूटना होगा, इसलिए AJAX टूलकिट $/थर्डपार्टी/माइक्रोसॉफ्ट/अजाक्सटूलकिट/(कुछ संस्करण संख्या) में संग्रहीत है। मुझे यह दृष्टिकोण पसंद है क्योंकि हम निर्माण करने के लिए जाने वाले सभी कलाकृतियों पर एक लेबल डाल सकते हैं।

परियोजना के भीतर डीएल के लिए एक और विचार हो सकता है ताकि अगर उन्हें परियोजना का नवीनतम लाभ मिल जाए तो उन्हें डीएलएस मिलेंगे।

+0

मैंने देखा है कि कंपनियां दोनों तरीकों से जाती हैं। हमने इसे एक बार एक बार किया था, लेकिन बंद कर दिया क्योंकि हम वास्तव में स्रोत नियंत्रण में निहित कलाकृतियों के आकार को सीमित करने की कोशिश कर रहे थे। –

0

हां, यह पूरी तरह से इंसान है और वास्तव में दर्दनाक है। यहां आपके लिए एक और विकल्प है: 1. अन्य पोस्ट सुझाए गए अनुसार, जीएसी से असेंबली निकालें। 2. अपनी निर्भरता संकल्प प्रणाली अपने बीआईएन फ़ोल्डर में असेंबली वितरित करें। यह वह जगह है जहां आपके सभी समाधान असेंबली भी संकलित की जाएंगी। 3. सभी संदर्भों को सेट करें स्थानीय = झूठी और विशिष्ट संस्करण = गलत कॉपी करें। इसका बिंदु डिबगिंग के दौरान असेंबली लोडिंग अपवाद का कारण बनना है, क्योंकि यदि यह बीआईएन में नहीं है तो वहां इसकी प्रतिलिपि बनाने के लिए कुछ भी नहीं है। और आपके समाधान तेजी से संकलित होंगे क्योंकि वीएस को फ़ाइलों को कॉपी करने की आवश्यकता नहीं होगी। और यह ओबीजे निर्देशिका में कहीं भी बैठे "अवांछित" डीएलएस को रोक देगा, जो वीएस चमत्कारी रूप से खोजने और प्रतिलिपि बनाने के लिए ...

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

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