2011-12-22 12 views
6

मेरे पास वर्तमान में एक प्रोग्राम है जिसे मैंने लिखा है कि इसे 3 अलग-अलग समाधानों में बांटा गया है।कौन सा दृश्य स्टूडियो समाधान प्रकार मेरे लिए सही है?

  1. मोर्चा अंत (सभी प्रदर्शन से संबंधित सामान)
  2. Parsers (जो प्रत्येक विशिष्ट डेटा पार्स करने के लिए एक dll बनाने एकाधिक (39) परियोजनाओं)
  3. वैश्विक (एकाधिक (5) परियोजनाओं है कि प्रत्येक एक dll बनाने कि पार्सर्स समाधान में परियोजनाओं द्वारा और सामने के अंत तक उपयोग किया जाता है)।

आवश्यकताएँ -

  • दोनों मोर्चा अंत और Parsers संकलन समय पर अस्तित्व के लिए वैश्विक DLLs की आवश्यकता होती है, और रन टाइम पर इस्तेमाल किया।
  • पार्सर्स डीएलएस असेंबली का उपयोग कर रन टाइम पर लोड होते हैं। लोडरफरेंस।
  • विकास है: C:\projects\myProg
  • तैनात स्थान है: C:\myProg

मेरे समस्या यह है कि मैं आगे और पीछे परियोजना निर्भरता, जहाँ मेरे वैश्विक DLLs के लिए इंगित करने के लिए साथ काम कर मुद्दों के साथ चल रहा है। क्या मैं तैनात स्थान या विकास स्थान पर इंगित करता हूं, और यदि ऐसा है, तो रिलीज़ या डीबग करें?

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

+4

कोई कारण नहीं कि आप परियोजना संदर्भों का उपयोग नहीं कर रहे हैं? आप assmblies लोड करने के लिए 'assembly.LoadReference' का उपयोग क्यों कर रहे हैं? अलग-अलग पार्सर्स के लिए आपके पास 39 (!) परियोजनाएं क्यों हैं? ग्लोबल्स के लिए 5 क्यों? – Oded

+0

एक आर्क आरेख होने के लिए एक अच्छी जगह होगी, एक समाधान परियोजनाओं का एक तार्किक समूह है। – mcabral

+0

ऐसा इसलिए किया गया था कि फ्रंट एंड पार्सिंग के बारे में गूंगा था। अगर मेरे पास एक नया संदेश था जिसके लिए पार्सिंग की आवश्यकता थी, तो मैं निर्देशिका में इसे एक डीएलएल फेंक सकता था। मुझे सामने वाले अंत से करना होगा डीएलएल के साथ एक संदेश आईडी, और मैं जाने के लिए अच्छा था। प्रत्येक डीएल विभिन्न डेटा प्रकारों के लिए अलग-अलग पार्सिंग को परिभाषित करता है। – Jason

उत्तर

3

सभी परियोजनाओं को एक ही समाधान में जोड़ें।

डीएल फाइलों के प्रत्यक्ष संदर्भों के बजाय परियोजनाओं के बीच "परियोजना संदर्भ" में किसी भी संदर्भ को बदलें। यह बहुत निर्भरता मुद्दों को ठीक करेगा।

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

अंत में, अपनी कई परियोजनाओं को एक परियोजना/असेंबली में विलय करने पर विचार करें। निर्माण के समय पर हत्यारा कोड की मात्रा नहीं है, यह असेंबली की संख्या है - मेरे पीसी पर प्रत्येक प्रोजेक्ट बिल्ड समय के लिए एक स्थिर निरंतर 3 सेकंड जोड़ता है, इसलिए छोटी परियोजनाओं को विलय करके मैंने काफी समय बचाया है।

+0

यह इस तरह से किया जाएगा कि @rfmodulator ने कहा था? मैं पार्सर्स बनाम ग्लोबल्स बनाम फ्रंट एंड को कैसे अलग तरीके से अलग करूँगा? – Jason

+0

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

+0

@ जेम्स - मैं सबसे अधिक संभावना ग्लोबल्स को एक असेंबली में जोड़ सकता हूं। दुर्भाग्यवश, पार्सर्स को मिश्रित करने का इरादा नहीं है। – Jason

0

वे अलग-अलग परियोजनाओं में क्यों बिखरे हुए हैं, पार्स और ग्लोबल्स को एक असेंबली में मिलाएं। यूआई असेंबली को अलग रखें और यथासंभव सरल/छोटा रखें।

+0

पार्सर्स का लक्ष्य फ़ील्ड के किसी बिंदु पर तुरंत एक नया पार्सर लिखने में सक्षम होना था, और इसे सही निर्देशिका में रखना था, और गुई इसे संभालेगा। इसके विपरीत, अगर हम इसे ऐसे विक्रेता को दे रहे थे जिन्होंने समर्थन नहीं किया (या हम संदेश नहीं देखना चाहते थे), तो हम सभी पार्सिंग डीएल को निकाल देंगे, लेकिन जिन्हें वे देखना चाहते थे। – Jason

+0

इसे संभालने के बेहतर तरीके हैं। लेकिन यह इस पोस्ट के दायरे से बाहर है। –

+0

साइडबार के लिए कोई रास्ता? मैं इस पर आपके विचारों से उत्सुक हूं। – Jason

2

चूंकि वे 3 एक ही सिस्टम का हिस्सा हैं, इसलिए इसमें प्रत्येक परियोजना के साथ एक एकल समाधान होना संभव होगा।

नोट: आपको अपने वर्तमान स्थानों से कुछ भी स्थानांतरित करने की आवश्यकता नहीं है।

बस एक नया खाली समाधान बनाएं और प्रत्येक परियोजना के लिए राइट-क्लिक जोड़ें> मौजूदा प्रोजेक्ट ... पर क्लिक करें, वे डिस्क पर हैं, लेकिन वे एक साथ खोले जाएंगे।

वर्तमान ("पुराने") समाधान भी उपलब्ध होंगे, जैसा कि वे हैं।

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

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

0

मान लीजिए कि आपके पास इतनी सारी परियोजनाएं होने का एक अच्छा कारण है (उदाहरण: किसी उत्पाद के विभिन्न लाइसेंस के लिए उपलब्ध पार्सर्स की अलग-अलग राशि)।दृश्य स्टूडियो में

प्रबंध निर्भरता करना आसान हो गया है:

  • अधिकार अपने समाधान नोड

  • चयन करें क्लिक करें "आदेश परियोजना बिल्ड ..."

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

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

एचटीएच।

+0

मजेदार बात यह है कि हमने समाधान के भीतर निर्भरताओं के लिए एक बिल्ड ऑर्डर सेट करने का प्रयास किया है। मेरे ।एसएलएन स्रोतों में चेक आउट दिखाई देगा (हाँ, मुझे पता है), लेकिन यह नहीं दिखाएगा कि इसमें कोई बदलाव आया है। – Jason

+0

आपको उस संवाद के माध्यम से अपने समाधान की प्रत्येक परियोजना पर निर्भरता निर्धारित करने की आवश्यकता है (वहां कॉम्बोबॉक्स देखें)। –

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