एक एकल Visual Studio समाधान में कई अनुप्रयोग [बंद]


17

मैं एक ऐसी कंपनी के लिए काम कर रहा हूं जो अपने सभी .Net अनुप्रयोगों (वेब ​​एप्लिकेशन, विंडोज एप्लिकेशन और कंसोल एप्लिकेशन) को एक सिंगल विजुअल स्टूडियो समाधान में एक साथ रखना चाहती है।

मैं उन डेवलपर्स के अनुभव की तलाश कर रहा हूं जो या तो इस तरह से अपने स्वयं के अनुप्रयोगों की संरचना करते हैं या जो ऐसा करने वाली कंपनी में काम करते हैं। यह एक अच्छा विचार है?

  • प्रत्येक एप्लिकेशन के लिए अलग-अलग समाधान होने के बजाय अपने सभी एप्लिकेशनों को एक ही समाधान में लगाने के लिए प्रो / कोन क्या हैं?

  • 20+ परियोजनाओं के समाधान के साथ विज़ुअल स्टूडियो कितना तेज़ है?

  • और स्रोत-नियंत्रित समवर्ती विकास के साथ समाधान फ़ाइल कितनी स्थिर है?


ध्यान रखें कि उत्तर विज़ुअल स्टूडियो के विशेष संस्करणों के लिए विशिष्ट हो सकते हैं।
स्टक

जवाबों:


21

हाल ही में, मैंने अपनी कंपनी के लगभग सभी स्रोत कोड को एक ही समाधान में स्थानांतरित कर दिया।

क्यों?

मूल रूप से, हमारे पास दर्जनों समाधान थे। एक समाधान से कुछ परियोजनाओं ने दूसरे से परियोजनाओं का पुन: उपयोग किया, और किसी ने पैकेज प्रबंधक का उपयोग करने की परवाह नहीं की। जिस दिन आप एक प्रोजेक्ट को काफी हद तक बदल देते हैं, जो अगले दिन या हफ्तों के लिए पूरी कंपनी के काम के घंटों और घंटों की उम्मीद करता है। सबसे बुरी बात यह है कि आप जान भी नहीं सकते बदलाव से वास्तव में क्या प्रभावित होगा।

सभी कोड को एक समाधान में विलय करना एक विकल्प था। यह पल के लिए अच्छी तरह से काम करता है, और निर्भरता अब पालन करना आसान है। एक विधि को संशोधित करना चाहते हैं, लेकिन यह परिवर्तन भी ट्रैक कर सकते हैं कि यह परिवर्तन कोड आधार में कहीं भी हो सकता है? विजुअल स्टूडियो आसानी से ऐसा कर सकता है। मेरे लिए, यह एक सफलता है।

निरंतर एकीकरण अब आसान भी है। संकलन और तैनाती का एक उपाय। कॉन्फ़िगर करने के लिए लगभग कुछ भी नहीं।

क्या यह स्केलेबल है?

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

आगे भी जाने के लिए, व्यवस्थित रूप से अनलोडिंग परियोजनाएं एक अच्छा विचार है (और वास्तव में आसान है जब परियोजनाओं को समाधान के भीतर निर्देशिकाओं में व्यवस्थित किया जाता है)। यदि कोई ऐसी चीज़ पर काम करता है जिसके लिए केवल तीन परियोजनाओं को लोड करने की आवश्यकता होती है, तो सभी 200 परियोजनाओं को लोड करने की कोई आवश्यकता नहीं है (जब तक कि, निश्चित रूप से, निर्भरताएं प्रभावित हो सकती हैं)।

संस्करण नियंत्रण अपेक्षित रूप से काम करता है (मैं एक SVN सर्वर का उपयोग कर रहा हूं, अगर यह मायने रखता है)। मैंने एक वास्तविक समवर्ती वातावरण में काम नहीं किया है, कहते हैं, दर्जनों डेवलपर्स अक्सर कोडिंग करते हैं, लेकिन मुझे लगता है कि इसमें बहुत सारे मुद्दे नहीं होंगे। बस उन मामलों से सावधान रहें जहां कई डेवलपर्स एक ही समय में नई परियोजनाएं जोड़ते हैं: .sln फ़ाइल को मर्ज करना सबसे आसान काम नहीं है।

निष्कर्ष

अगर मुझे फिर से फैसला लेना पड़ा:

  1. मैं अभी भी एक ही समाधान में सब कुछ पलायन करूँगा। यह टूटी हुई निर्भरता के दर्द को काफी कम कर देता है, और अकेले यह लाभ पूरी तरह से इसके लायक है। सभी कोड के लिए एक केंद्रीकृत स्थान होना भी एक अच्छा विचार है; यह संभव बनाता है, उदाहरण के लिए, Visual Studio के भीतर किसी चीज़ की खोज करना। मैं दो कमजोर रूप से संबंधित परियोजनाओं पर भी काम कर सकता हूं, और अभी भी केवल एक विजुअल स्टूडियो विंडो खुली है।

  2. मैं एक और अधिक NuGet और एक निजी NuGet सर्वर को होस्ट करने की क्षमता का भी अध्ययन करूंगा। जब आप कुछ प्रोजेक्ट्स को आम समाधान में नहीं जोड़ना चाहते हैं, तो NuGet के माध्यम से निर्भरता को प्रबंधित करना कुछ समस्याओं को हल कर सकता है। व्यक्तिगत रूप से, मेरे पास ऐसे मामले नहीं थे, लेकिन मुझे लगता है कि अन्य कंपनियों के पास हो सकता है।

  3. अंत में, हर डेवलपर के लिए SSD में निवेश करने से भारी अंतर हो सकता है। लेकिन आपको इसकी आवश्यकता नहीं है, और मेरे मामले में, कोड आधार अभी भी एक साधारण हार्ड ड्राइव पर संग्रहीत है।


2
बस कुछ बिंदु FYI करें: आप वीएस में .csproj फ़ाइल के माध्यम से भी प्रोजेक्ट खोल सकते हैं यदि गति / प्रदर्शन एक मुद्दा है। एक NuGet "निजी सर्वर" सिर्फ एक नेटवर्क फ़ोल्डर है (और उस फ़ोल्डर को वीएस में पैकेज स्रोत स्थान के रूप में जोड़ें) - बस वहां nupkg फ़ाइलों को ड्रॉप करें और यह काम करता है।
स्टीवन एवर्स

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

@ ब्रूसहिल: एसवीएन के साथ, आप ठीक से कॉन्फ़िगर कर सकते हैं जिनके पास क्या है। जूनियर डेवलपर अभी भी हर रूट डायरेक्टरी ( सर्वर फॉल्ट पर मेरा सवाल देखें ) को देख पाएगा, लेकिन प्रतिबंधित परियोजनाओं तक नहीं पहुंच पाएगा।
आर्सेनी मूरज़ेंको

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

8

यह अभीष्ट उपयोग है।

प्रत्येक एप्लिकेशन के लिए अलग-अलग समाधान होने के बजाय अपने सभी एप्लिकेशनों को एक ही समाधान में लगाने के लिए प्रो / कोन क्या हैं?

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

20+ परियोजनाओं के समाधान के साथ विज़ुअल स्टूडियो कितना तेज़ है?

20+ परियोजनाओं के साथ ... इतना बुरा नहीं हो सकता है। मैं वी.एस. की समस्याओं के बिना अधिक देखा है। यह बहुत स्थिर / त्वरित है। कैसे ... अगर यह एक समस्या है, तो इसे कम किया जा सकता है: वीएस में .csproj खोलें और वहां से काम करें। आपको एक समाधान में सब कुछ होने का लाभ नहीं मिलता है, लेकिन आप हमेशा जरूरत पड़ने पर स्लाइन को फिर से खोल सकते हैं और जब आप की जरूरत होती है तो सिर्फ .csproj में काम करते हैं (जैसे आप अभी करते हैं)।

और स्रोत-नियंत्रित समवर्ती विकास के साथ समाधान फ़ाइल कितनी स्थिर है?

समाधान फ़ाइल केवल तभी बदलती है जब आप प्रोजेक्ट्स या समाधान-स्तरीय ऑब्जेक्ट्स जोड़ते / हटाते हैं, इसलिए यह शायद ही कभी बदलता है। यह xml है, इसलिए आप देख सकते हैं कि इसमें क्या है। वे शायद ही कभी बदलते हैं।


स्टीव, आपने कहा "यह इच्छित उपयोग है।" क्या आप इसके लिए कोई संदर्भ प्रदान कर सकते हैं? धन्यवाद!
सुधार हुआ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.