2012-01-24 7 views
6

क्या डीबग/रिलीज के लिए लक्ष्य आउटपुट फ़ोल्डर परिभाषित करने के लिए सबसे अच्छा अभ्यास है: यह बेहतर अलग फ़ोल्डर डीबग/रिलीज के लिए के लिए या मैं (का उपयोग करते समय दोनों के लिए एक ही फ़ोल्डर का उपयोग करना चाहिए है। नेट/सी #)?.NET (C#) का उपयोग करते समय डीबग/रिलीज़ आउटपुट के लिए अलग या समान फ़ोल्डर्स?

मैं दो अलग समाधान है, तो एक ही समाधान की परियोजनाओं अन्य समाधान की एक परियोजना के लिए परियोजना द्वारा एक संदर्भ नहीं हो सकता। तो आपको सीधे असेंबली फ़ाइल का संदर्भ जोड़ने के लिए मजबूर होना पड़ता है। यह एक और समस्या में परिणाम देता है: यदि आप किसी फ़ाइल के माध्यम से किसी अन्य असेंबली का संदर्भ जोड़ते हैं तो आप डीबग के लिए एक के बजाय केवल एक जोड़ सकते हैं और एक पूर्व रिलीज (जैसे आप सी ++ में पुस्तकालयों के साथ कर सकते हैं)। एक और समस्या यह है कि मुझे एक संदर्भ जोड़ना है, उदाहरण के लिए, बिन/रिलीज /MyOtherProject/MyAssembly.dll। मुझे लगता है कि यह भ्रमित है, खासकर जब डीबग का निर्माण और संदर्भित रिलीज किया गया है। => त्रुटियां बनाएं और संस्करण विवाद हो सकते हैं।

बड़ी परियोजनाओं और वातावरण में एक ही लक्ष्य फ़ोल्डर में निर्माण में किसी को भी लंबे समय का अनुभव है?

यह स्टैक ओवरफ़्लो प्रश्न Should we still make a difference between the release and debug output folders? से संबंधित एक और सटीक प्रश्न है।

+5

वीएस स्वचालित रूप से अलग निर्देशिका बनाता है। –

+0

... लेकिन यदि आप किसी अन्य असेंबली का संदर्भ जोड़ते हैं तो आप डीबग और एक पूर्व रिलीज के लिए एक के बजाय केवल एक जोड़ सकते हैं। अगर मेरे पास कई समाधान हैं (वर्तमान में प्लेटफार्म निर्भर) मुझे एक संदर्भ जोड़ना है उदा। बिन/रिलीज/MyOtherProject/MyAssembly.dll के लिए। मुझे लगता है कि यह भ्रमित है, खासकर जब डीबग का निर्माण और संदर्भित रिलीज किया गया है। => त्रुटियां बनाएं और संस्करण विवाद हो सकते हैं – Beachwalker

+2

यदि आप समसामयिक रूप से अन्य असेंबली विकसित कर रहे हैं, तो इसके लिए परियोजना एक समाधान का हिस्सा होना चाहिए। इस तरह दोनों एक ही विन्यास (डीबग या रिलीज) में एक साथ संकलित होते हैं। यदि अन्य असेंबली एक अलग प्रयास है, तो मैं रिलीज संस्करण का उपयोग करूंगा ताकि डीबग संस्करण अन्य प्रोजेक्ट के लिए आपकी रिलीज प्रोजेक्ट फाइलों में फिसल न सके। –

उत्तर

5

हम डिबग के लिए एक ही निर्देशिका का उपयोग किया गया है और 10 साल के लिए NET अनुप्रयोगों में जारी करने और एक समस्या थी कभी नहीं किया है।

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

4

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

मुझे लगता है कि सबसे अच्छा अभ्यास हो जाएगा करने के लिए या तो

1) परियोजना में एक लिब निर्देशिका/समाधान एक है कि आप मैन्युअल परियोजना/समाधान बी के उत्पादन में कॉपी इस अगर आप परियोजना बी को परिवर्तन नहीं करते हैं करते हैं अक्सर।

2), एक ही समाधान में दोनों परियोजनाओं रखो तो परियोजना के लिए एक संदर्भ जोड़ें। याद रखें, आपके पास एकाधिक समाधानों में एक प्रोजेक्ट हो सकता है। ऐसा करें अगर आप एक ही समय में दोनों परियोजनाओं का विकास कर रहे हैं।

+2

सही, अगर परियोजना ए स्रोत नियंत्रण (टीएफएस) परियोजना ए के अंतर्गत है और प्रोजेक्ट बी स्रोत नियंत्रण परियोजना बी के तहत है, तो आप ए और दोनों में जांच सकते हैं एक समाधान से बी, जो काफी अच्छा है। – John

+0

रिलीज आउटपुट में मेरे दृष्टिकोण से डीबग प्रतीकों (न तो अंदर या पीडीबी-फाइल के रूप में) होना चाहिए। सेटअप विकल्प के दौरान पोस्ट बिल्ड चरण के रूप में पीडीबी-फाइलों को हटाने का विकल्प होगा। – Beachwalker

+0

वर्तमान में हमारे पास एक ही समाधान में निर्माण करने के लिए बहुत अधिक परियोजना फाइलें हैं (असेंबली, गतिशील रूप से लोड और वसंत के माध्यम से विनिमय योग्य)। जब समाधान इतना बड़ा होता है तो वीएस + रिशेर्पर बहुत धीमा हो जाता है। तो एक समाधान होने का विकल्प नहीं है (शीर्ष पर टिप्पणियां देखें)। एक और कारण बाहरी घटकों द्वारा डिलीवरी और सीआई में डिलीवरी है जो वर्तमान/नवीनतम विकास के साथ तालमेल करना चाहिए (हल करने का विकल्प जो डिलीवरी से unittests को कम करने के लिए होगा, लेकिन यह एपीआई परिवर्तनों के दौरान unittests बदलने के लिए लागत होगी)। – Beachwalker

4

आप दो संबंधित परियोजनाओं है कि आप के बारे में उन्हें एक ही लक्ष्य प्रकार और विन्यास (यह तुम सिर्फ का उपयोग कुछ तृतीय-पक्ष पैकेज नहीं है इसका मतलब है) में किया जा रहा पर्याप्त परवाह है - तो आप बेहतर उन्हें एक ही समाधान में डाल दिया।

यदि आप किसी कारण से नहीं कर सकते हैं, तो एक और (थोड़ा बदसूरत) समाधान है।

आप अपने .csproj और "गतिशील" संदर्भ लक्ष्य के आधार पर विधानसभाओं संपादित कर सकते हैं। .csproj फ़ाइल में संदर्भ "आइटम समूह" नामक XML तत्व के अंदर हैं। प्रत्येक itemgroup में आप कई "संदर्भ" तत्वों है, और विधानसभा के लिए पथ "सुझाव" तत्व में है। आप संकेत में $ (कॉन्फ़िगरेशन) चर डाल सकते हैं।उदाहरण के लिए:

<ItemGroup> 
    <Reference Include="your assembly"> 
     <HintPath>..\..\$(Configuration)\blabla.dll</HintPath> 
    </Reference> 
</ItemGroup> 

इस तरह, निर्देशिका का नाम आपके विन्यास नाम शामिल होंगे (- जिसका अर्थ है कि यदि आप नाम बदलने आप चीजों को तोड़ने वे मैच होना चाहिए)।

एक अन्य विकल्प तीन पूरी तरह से अलग आइटम समूहों को परिभाषित और "स्थिति" विशेषता का उपयोग करने के लिए है: कोई शर्त यह है कि संदर्भित करने के लिए प्रणाली, System.Xml, आदि का उपयोग करेगा साथ

  1. मद समूह
  2. विशेषता समूह के साथ आइटम समूह Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " जिसमें संदर्भ शामिल होंगे जो डीबग कॉन्फ़िगरेशन में उपयोग किए जाएंगे।
  3. रिलीज कॉन्फ़िगरेशन के लिए विशेषता " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " के साथ आइटम समूह।

प्रत्येक आइटम समूह में आप सही विन्यास में विधानसभाओं के संदर्भ में होगा।

यह थोड़ा बदसूरत है, क्योंकि .csproj कभी-कभी स्वचालित रूप से संशोधित होता है और आप आसानी से भूल सकते हैं और इससे गड़बड़ कर सकते हैं। लेकिन वैसे भी, यह काम करेगा।

+0

दृश्य परिवर्तनीय अभिव्यक्तियों का उपयोग दृश्य सी ++ परियोजनाओं में अच्छी तरह से काम करता है (या काम करता है), मैंने उन्हें स्वयं उपयोग किया है। लेकिन वीएस के साथ सी # परियोजनाओं में एक समस्या है कि आप यूई (जैसे आप सी ++ परियोजनाओं में कर सकते हैं) का उपयोग करके उन चरों को दर्ज नहीं कर सकते हैं। निजी तौर पर, मुझे उन चीज़ों को पसंद नहीं है जिन्हें आप आईडीई का उपयोग करके व्यक्त नहीं कर सकते हैं और परिवर्तन के बाद हाथ से फ़ाइल को संपादित करने की आवश्यकता है। फिर भी, आपका सुझाव काम कर रहा है और समस्या को हल करने का एक तरीका है। धन्यवाद। – Beachwalker

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

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