2012-12-28 9 views
6

यह शायद पहले पोस्ट किया गया है, लेकिन मुझे यकीन नहीं है कि खोज शब्द किसके लिए खोज रहे हैं!विजुअल स्टूडियो: परियोजनाओं के बीच साझा कोड का प्रबंधन कैसे करें

त्वरित स्पष्टीकरण।

मेरे पास कुछ परियोजनाओं के बीच साझा किया गया कोड है। यह कोड अभी भी प्रगति में है। मुद्दा यह है कि जब भी मुझे इस कोड को जो कुछ भी अपडेट करना है, मैं इसे 3 बार नहीं करना चाहता, यह एक दुःस्वप्न बन जाएगा।

क्या इसे किसी प्रोजेक्ट में जोड़ने के लिए कोई तरीका है, इसे प्रोजेक्ट फ़ोल्डर में कॉपी किए बिना? यानी मैं चाहता हूँ साझा वर्ग के रूप में मेरी 3 परियोजनाओं में जुड़े होने की

C: \ कोड भंडार \ sharedclass.cs नहीं \ eachproject \ बिन \ sharedclass.cs

मैं इसे बनाने के लिए के रूप में यह खुद है क्या पुस्तकालय परियोजना? यह बेहतर होगा अगर संकलक इसे 'बाहरी' कोड के रूप में संकलित कर सके।

चीयर्स।

+0

आपका मतलब विजुअल स्टूडियो में "लिंक के रूप में फ़ाइल जोड़ें" विकल्प जैसा कुछ है? http://support.microsoft.com/kb/306234 (संपादित करें: यह माना जा रहा है कि आप बस एक साझा प्रोजेक्ट का उपयोग नहीं करना चाहते हैं?) –

+1

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

+0

http://msdn.microsoft.com/en-us /library/1xhzskbe.aspx –

उत्तर

-1

सामान्य भाग को एक अलग परियोजना पुस्तकालय में निकालना बेहतर है और इस समाधान का संदर्भ सभी समाधान/निर्भर परियोजनाओं में जोड़ें।

अन्यथा आप Add code/file/item as Link कर सकते हैं।

+0

लिंक के रूप में जोड़ें इस विशेष उदाहरण में सबसे अच्छा काम किया। –

+2

लिंक टूटा हुआ है। – benderto

5

हां।

आप किसी भी समाधान से अपने हार्ड ड्राइव पर कहीं भी एक परियोजना जोड़ सकते हैं। तो साझा कोड को कक्षा पुस्तकालय में रखें और इसे अपनी तीन परियोजनाओं में जोड़ें।

+0

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

2

माइक्रोसॉफ्ट एक ओपन सोर्स प्रोजेक्ट का समर्थन कर रहा है जो अब वीएस में बनाया गया है, इसे NuGet कहा जाता है, आप अपनी साझा परियोजना को एक न्यूजेट फ़ाइल के रूप में आउटपुट कर सकते हैं और इसे अपनी अन्य परियोजनाओं में उपभोग कर सकते हैं।

यह वास्तव में निर्माण पर पैकेज में निर्दिष्ट सभी फ़ाइलों को तैनात करेगा।

इस प्रकार .Net निर्भरताओं का समर्थन करता है। आप देखेंगे कि ईएफ जैसी चीजें NuGet संकुल के माध्यम से भी आती हैं। आप इसे MyGet.org जैसे स्थानों पर भी निःशुल्क होस्ट कर सकते हैं, मैं इसका उपयोग करता हूं और यह काफी अच्छा काम करता है।

http://nuget.org/

0

हाँ, कोड जो अपने अन्य परियोजनाओं में निर्माण, एक अलग वर्ग पुस्तकालय परियोजना में साझा करने के लिए इसे बनाने की जरूरत है और इस से बनाए गए DLL संदर्भ डाल दिया।

6

जैसा कि अन्य ने कहा है, आप समाधान समाधान में अपने समाधान पर राइट-क्लिक कर सकते हैं, जोड़ें> मौजूदा प्रोजेक्ट का चयन कर सकते हैं और सामान्य परियोजनाओं को ब्राउज़ कर सकते हैं .csproj फ़ाइल और इसे इसके मूल स्थान से समाधान में शामिल किया जाएगा।

इस के साथ दो समस्याएं हैं लेकिन जो हो सकता है या एक मुद्दा नहीं हो सकता है, अपनी टीम के आकार के आधार:

1 - आम परियोजना समाधान फाइल करने के लिए एक रिश्तेदार पथ के साथ प्रत्येक समाधान में शामिल होगा (आईई: ... \ CommonProject \ Common.csproj)। इसका मतलब है कि सभी डेवलपर्स के पास एक ही काम करने वाली फ़ाइल संरचना होनी चाहिए या जब वे मुख्य प्रोजेक्ट खोलने का प्रयास करेंगे तो उन्हें त्रुटियां मिलेंगी।

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

फिर से, के रूप में अन्य के कहा है, वहाँ कोई 'सही' तरीका यह है है, लेकिन दृष्टिकोण मैं ले लिया है इस प्रकार है:

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

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

3 - सभी डीएलएल फ़ोल्डर के स्थान को नियंत्रित करने के लिए सभी डेवलपर्स मशीनों और बिल्ड सर्वर पर पर्यावरण चर का उपयोग करें और हार्ड-कोड किए गए पथ की बजाय उस चर का उपयोग करके डीएलएल का संदर्भ लें। (आईई: सी: \ Source \ MyCommonProjectDLLS \ Common.dll के बजाय $ (MyCommonLocation) \ Common.dll का उपयोग करें 'MyCommonLocation' को C: \ Source \ MyCommonProjectDLLS पर सेट किया गया है:

4 - किसी भी प्रोजेक्ट के संदर्भ में संदर्भ सामान्य डीएलएल, उस परियोजना के लिए सामान्य डीएलएल फ़ोल्डर देखने के लिए बिल्ड सर्वर पर एक सीआई ट्रिगर स्थापित करता है। जब भी इसमें बदलाव किए जाते हैं, तो बिल्ड सर्वर को सभी उपभोग करने वाली परियोजनाओं का निर्माण करना चाहिए।

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

आम DLLs
-1.0.0.1234
-1.0.0.1235
-1.0.0.1236

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

उम्मीद है कि इससे मदद मिलती है।

+0

टिप के लिए धन्यवाद, मैंने ऊपर वर्णित समस्या से मुलाकात की है और आपका उत्तर बहुत उपयोगी था! – QtRoS

0

मैं इसे प्राप्त करने के लिए git submodules का उपयोग करता हूं।

  1. प्रत्येक मॉड्यूल (प्रोजेक्ट) के लिए एक नया गिट भंडार बनाएं जिसे आप समाधान के बीच साझा करना चाहते हैं। मैं आमतौर पर उस परियोजना के लिए एक अलग परियोजना में यूनिट परीक्षण भी शामिल करता हूं लेकिन उसी गिट भंडार में।
  2. साझा कोड का उपयोग करने वाले समाधान के गिट भंडार में submodule जोड़ें। एक सबमिशन जोड़ना बाहरी भंडार की एक विशिष्ट प्रतिबद्धता के लिए एक लिंक बनाता है। जब सबमिशन में कोड अपडेट किया जाता है तो आप अपडेट को अपने मूल समाधान में खींचने में सक्षम होंगे, जो अनिवार्य रूप से सबमिशन प्रतिबद्धता के संदर्भ को अपडेट करने जैसा ही है।मुझे लगता है कि SourceTree जैसे ऐप का उपयोग करके प्रक्रिया को देखना आसान है।
  3. सबमिशन जोड़ना और नवीनतम प्रतिबद्धता खींचना मूल समाधान फ़ोल्डर के अंदर साझा प्रोजेक्ट की एक प्रति बना देगा। समाधान पर राइट-क्लिक करके और "मौजूदा प्रोजेक्ट जोड़ें" का चयन करके प्रोजेक्ट को पैरेंट विजुअल स्टूडियो समाधान में आयात करें।
  4. अन्य परियोजनाओं में साझा प्रोजेक्ट का संदर्भ जोड़ें जो परियोजना पर राइट-क्लिक करके और "समाधान जोड़ें" चुनकर और "समाधान" टैब में साझा प्रोजेक्ट को ढूंढकर इसका उपयोग करेगा।

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

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