.NET

2012-01-16 6 views
7

में समाधानों के बीच सामान्य पुस्तकालयों को साझा करने का सर्वोत्तम अभ्यास हमारे पास एमएसवीएस समाधान (समाधान "ए", "बी", "सी", ...) का पूल है जो "Common.dll" नामक असेंबली में मूल कार्यक्षमता साझा करता है। ।.NET

3-5 सक्रिय समाधान (जो विकासशील हैं) जबकि अन्य निष्क्रिय हैं और शायद ही कभी पुनर्निर्मित किए जाते हैं।

Common.dll हमेशा विकासशील है। मेरे समाधान कोड को बनाए रखने के कई विकल्प हैं, आप क्या सुझाव देंगे और क्यों?

ए)। प्रत्येक समाधान पर common.dll स्रोत कोड डालें। पेशेवर: यह निष्क्रिय समाधानों के साथ बढ़ने के लिए सक्रिय समाधानों की सहायता करेगा जबकि निष्क्रिय समाधान संकलित होंगे। विपक्ष: सक्रिय समाधानों के बीच सक्रिय common.dll कोड को सिंक्रनाइज़ करना मुश्किल है

बी)। प्रत्येक समाधान पर common.dll बाइनरी कोड डालें। पेशेवर: सभी परियोजनाएं संकलित होंगी जबकि common.dll कोड केंद्रीकृत किया जाएगा। विपक्ष: सामान्य डीएल

सी) के साथ सक्रिय समाधानों को साइड-बाय-साइड बढ़ाना मुश्किल है। संदर्भ हर परियोजना पिछले common.dll बाइनरी बी की तरह दिखता है, लेकिन यह निष्क्रिय समाधान के साथ समस्याओं लाता हूँ अगर common.dll बढ़ने और बदल यह इंटरफेस (कुछ कह सकते हैं इंटरफेस हमेशा स्थिर रहना चाहिए) है जाएगा

डी) । ?

अग्रिम धन्यवाद!

+0

क्या आपके समाधानों को आपके common.dll के विभिन्न संस्करणों को संदर्भित करने की आवश्यकता है? – Nick

+1

कौन जानता है। Common.dll के सभी संस्करणों को अद्यतित रखने के लिए, सामान्य डीएलएल के सटीक संस्करण के साथ निष्क्रिय समाधान को स्थिर करना आसान होगा। –

+2

मैं इस के लिए अपनी खुद की कंपनी-साइड न्यूज फ़ीड http://docs.nuget.org/docs/creating-packages/hosting-your-own-nuget-feeds सेट अप करना चाहता हूं - यह इसे काफी आसान बनाता है उपग्रह परियोजना संदर्भ आवश्यकताओं का प्रबंधन करें (पैकेज में आप अधिकतम संस्करण के साथ-साथ न्यूनतम संस्करण को एन्कोड कर सकते हैं)। हमने अभी यह किया है और यह चट्टानों। –

उत्तर

1

हम एक सीआई सर्वर सुनिश्चित करें कि आम पुस्तकालयों हमेशा से रहे हैं बनाता है ज्यादातर बी

की तरह कुछ अभ्यास अप-टू-डेट (भले ही वे अन्य आम पुस्तकालयों themselfes उपयोग करें)। सामान्य पुस्तकालयों का उपयोग करने वाले प्रत्येक समाधान में "लिब" फ़ोल्डर होता है जहां हम निर्माण कलाकृतियों को डालते हैं, लेकिन ये स्रोत नियंत्रण में नहीं हैं (बाहरी कलाकृतियों के विपरीत, जैसे कि NuGet के रूप में आयात किए गए)।

तो विकासशील होने पर आपको सामान्य libs में परिवर्तन तोड़ने की वजह से समस्या नहीं आती है और डेवलपर उस समय बिंदु चुनता है जब वह उन्नयन करता है (लेकिन उसे हमेशा केंद्रीय रिपो में आने से पहले ऐसा करना होता है)।

सीआई सर्वर हमेशा नवीनतम आम पुस्तकालयों को निर्माण के तहत समाधान के "लिब" में कॉपी करेगा, ताकि नवीनतम आम पुस्तकालय एकीकृत हो जाएं। अगर हमें पुराने पुस्तकालयों (विशिष्ट हॉटफिक्स रिलीज - बहुत दुर्लभ) के साथ निर्माण करने की आवश्यकता है, तो हम हमेशा मेल खाने की तारीख के साथ निर्माण कलाकृतियों का उपयोग कर सकते हैं। सामान्य पैच/फिक्स रिलीज़ आमतौर पर नवीनतम आम पुस्तकालयों में भी अपग्रेड किए जाते हैं।

1

मैं छूट (ए) सीधे कहूंगा, क्योंकि आप रखरखाव के लिए आपके पास किसी भी क्षमता को मार देंगे!

प्रभावी रूप से, यह नीचे आता है कि ये कोड बेस कितनी बार बदल जाएंगे।

एक समान सेटअप पर हमारा इलाज समाधान एक अलग 'सामान्य' परियोजना है, और द्विआधारी को प्रत्येक परियोजना के लिए 'लिब्स' फ़ोल्डर में कॉपी किया जाता है जो सामान्य संदर्भ देता है। इसका कारण यह है कि हमारे पास प्रत्येक प्रोजेक्ट में common.dll के स्पष्ट संस्करणों को तैनात करने की क्षमता है। लिब्स फ़ोल्डर टीएफएस के माध्यम से बनाए रखा जाता है। इसलिए जब मूल परियोजना को पुन: सम्मिलित करने की आवश्यकता नहीं है, टीएफएस में एक नई जांच दिखाई देगी और तदनुसार कार्य कर सकती है।

आपका दूसरा विकल्प जो मैं मानता हूं, this link पर समाधानों में से एक के अनुसार सामान्य परियोजना 'सीटू' में संदर्भित करना है।ध्यान दें कि यह सामान्य के विभिन्न संस्करणों को संदर्भित करने की आपकी क्षमता को सीमित करता है जबतक कि आप प्रत्येक भौतिक संस्करण के लिए अलग-अलग प्रोजेक्ट संस्करण नहीं बना रहे हैं, जो स्थिरता के कारण फिर से असंभव और अव्यवस्थित होगा।

2

वहाँ अन्य विकल्प हैं भी:

डी) एक ही SVN (या अन्य सीवीएस) जड़ अंदर सभी परियोजनाओं रखो।

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

समस्या यह है कि सभी परियोजनाएं एक ही एसवीएन के अंदर हैं। :)

इसके बारे में क्या अच्छा है कि आप अपने द्वारा बनाई गई प्रत्येक शाखा में अपने Common.dll के स्रोत कोड का एक स्नैपशॉट प्राप्त करना सुनिश्चित कर रहे हैं।

ई) का प्रयोग करें SVN रूपरेखा

आप सबवर्सन का उपयोग कर रहे हैं, तो आप उपयोग कर सकते हैं SVN Externals (एक versioned संसाधन की एक यूआरएल के लिए एक स्थानीय सबफ़ोल्डर मानचित्रण)। जीआईटी something similar का भी समर्थन करता है, लेकिन अगर आप बाहरी रिपो में परिवर्तन जमा करना चाहते हैं तो यह थोड़ा जटिल है।

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