2009-03-25 6 views
38

मेरे पास 3 समाधान हैं और समाधान ए को संकलन के लिए समाधान बी और सी से डीएलएस के निर्मित संस्करणों की आवश्यकता है। इसे एक समाधान में विलय करना संभव नहीं है ...एकाधिक दृश्य स्टूडियो समाधानों को एक साथ कैसे लिंक करें?

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

मुझे विश्वास है कि यह एक आम समस्या है, लेकिन आप इसे अच्छी तरह से कैसे जोड़ते हैं?

+0

आप उन्हें 1 समाधान में क्यों विलय नहीं कर सकते? –

+0

आप एमएसबिल्ड का उपयोग क्यों नहीं करते? – eglasius

+4

हम इसे एक समाधान में नहीं डाल सकते क्योंकि बी और सी का उपयोग केवल ए से अधिक में बनाम बनाम बनाम बना हुआ है; अगर एमएसबिल्ड बेहतर काम करता है तो कृपया कहें कि कैसे! –

उत्तर

29

यह प्रश्न different में, लेकिन related, रूपों में पॉप अप हो गया है। वास्तव में MSDN page that covers this है।

जो आप खोज रहे हैं वह के रूप में एक बहु-समाधान दृष्टिकोण है जो बड़े सिस्टम के लिए विभाजित एकल समाधान मॉडल है। एक "सबकुछ" समाधान है जो सब कुछ बनाता है और आपके अंतर-घटक निर्भरताओं को बनाए रखता है। जब आप समाधान ए बनाने की आवश्यकता होती है तो यह वही होता है जब आपके पास अलग-अलग समाधान होते हैं जिनमें केवल घटक बी या सी शामिल होते हैं।अनिवार्य रूप से, आप अभी भी 3 समाधान होगा, लेकिन आप समाधान ए में समाधान बी और सी से परियोजनाओं जोड़ देंगे

+2

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

+0

इस मामले में आप कस्टम बिल्ड सिस्टम के साथ पूरी तरह से विभाजित मॉडल पर जाते हैं। :) यह एक असामान्य परिदृश्य नहीं है। –

3

यह प्रोजेक्ट स्तर होना चाहिए जिसे आप मानते हैं। परियोजनाओं समाधान बी और सी के भीतर निहित का निर्माण और फिर संदर्भ

समाधान ए में प्रासंगिक परियोजनाओं में DLLs के लिए जोड़ MSBuild में यदि आप एक संपत्ति समूह

<PropertyGroup> 

<SolutionsToBuild>SolutionB</SolutionsToBuild> 
<SolutionsToBuild>SolutionC</SolutionsToBuild> 
<SolutionsToBuild>SolutionA</SolutionsToBuild> 
</PropertyGroup> 

तब निष्पादित राशि MSBuild कार्य

<MSBuild Projects="@(SolutionsToBuild)"/> 

आशा इस

0

आप को जोड़ने के लिए कमांड लाइन dll के लिए आदेश (समाधान बी और सी में) का निर्माण आप में prebuild ई पर निर्भर करते हैं की कोशिश कर सकते मदद करता है आपकी परियोजनाओं के vents (समाधान ए) में

0

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

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

एक आदर्श समाधान नहीं है, लेकिन यह काम करना बहुत आसान है।

0

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

4

मुझे हाल ही में पता चला है कि विजुअल स्टूडियो 2008 में आप कई समाधानों में मौजूदा परियोजनाओं को शामिल कर सकते हैं। अब तक का एकमात्र नकारात्मक पक्ष ऐसा लगता है कि यदि आप किसी साझा प्रोजेक्ट में बदलाव करते हैं और कई समाधान खोलते हैं जो उस साझा प्रोजेक्ट का उपयोग करते हैं तो आपको अन्य समाधानों को "पुनः लोड" करने के लिए कहा जाएगा।

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

1

आप कुछ समय बचाने के लिए मर्ज प्रक्रिया को स्वचालित करने की कोशिश कर सकते हैं: http://code.google.com/p/merge-solutions/

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

+0

कूल टूल। धन्यवाद! निर्माण आदेश निर्दिष्ट करने के लिए –

0

this answer के अनुसार, मैं तुम्हें को बनाने की सिफारिश करेंगे आपके अपनी बैच फ़ाइल जो आपके लिए प्रासंगिक समाधान तैयार करेगी।

यह उपयोग करने में बहुत आसान है क्योंकि बिल्ड प्रक्रिया प्रत्येक बिल्ड निष्पादन के लिए कमांड को बढ़ावा देने के लिए बिल्ड प्रगति (विजुअल स्टूडियो में आउटपुट विंडो के समान) आउटपुट करेगी।

  1. निर्माण समाधान बी
  2. निर्माण समाधान सी
  3. निर्माण:

    इसके अलावा, एक मामला है कि आप अन्य से पहले एक समाधान का निर्माण करने की जरूरत है, आप अपने खुद के निर्माण के क्रम, उदाहरण के लिए लिख सकते हैं समाधान ए (जो आंतरिक रूप से "समाधान बी" और "समाधान सी" निर्मित फाइलों का उपयोग करता है)

मैंने जल्दी से script to clarify the build order mentioned above लिखा है और अधिकांश आधुनिक विजुअल स्टूडियो संस्करणों का समर्थन किया है।

सम्मान।

+0

या [nant] (http://nant.sourceforge.net/) का उपयोग करें। प्रत्येक समाधान निर्माण लक्ष्य के भीतर एक अलग कार्य हो सकता है। –

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