2011-02-24 9 views
24

की मैं एक खिड़की है लगता है चलो फॉर्म्स ही समाधान में कुछ बाहरी संदर्भ और अन्य वर्ग पुस्तकालय परियोजनाओं के लिए संदर्भ भी साथ/कंसोल आवेदनसी # परियोजना।विजुअल स्टूडियो में संकलित करते समय DLLs को किसी भिन्न फ़ोल्डर में कैसे सहेजते हैं?

जब मैं विंडो फार्म परियोजना का निर्माण, मैं चाहता हूँ संदर्भित पुस्तकालयों एक अलग स्थान में संग्रहित किया जाना (जैसे: बिन \ रिलीज \ पुस्तकालय), और .exe को उसी फ़ोल्डर में नहीं

क्या यह करना संभव है?

+1

क्या आप उन्हें एक फ़ाइल संदर्भ, या एक परियोजना संदर्भ के रूप में संदर्भित कर रहे हैं? – mellamokb

+1

एक पोस्टबिल्ड चरण के साथ, लेकिन आपको असेंबली के लिए प्रोबिंग पथ सेट करने के लिए अपना ऐपडोमेन सेटअप भी बदलना होगा अन्यथा आपकी लाइब्रेरी डीएल की कभी लोड नहीं होगी। क्या आपने इसके बारे में सोचा है? – rene

+0

@mellamokb दोनों। मेरे पास मेरे समाधान में परियोजनाओं के संदर्भ हैं, और उन (और WinForm भी) में बाहरी। डीएल फाइलों के संदर्भ भी हैं। –

उत्तर

15

पर इस सवाल पर यहाँ देखो वहाँ अपने प्रश्न के 2 भागों हैं:

अपनी पसंद के फ़ोल्डरों में विधानसभाओं/EXE निर्माण करने के लिए समाधान कॉन्फ़िगर करने के लिए कैसे - यह वीएस (प्रोजेक्ट गुण -> बिल्ड -> आउटपुट पथ) में प्रोजेक्ट के गुणों के माध्यम से कॉन्फ़िगर किया गया है। प्रत्येक संदर्भ पर चेक "कॉपी स्थानीय" संपत्ति का भी मूल्य।

गैर-डिफ़ॉल्ट स्थानों (यानी आपके ... \ पुस्तकालय फ़ोल्डर से) असेंबली फ़ाइलों को कैसे लोड करें - आपको असेंबली खोज स्थान पर इस गैर-डिफ़ॉल्ट पथ जोड़ने के लिए अपनी app.config फ़ाइल में परिवर्तन करने की आवश्यकता है (http://support.microsoft.com/kb/837908)।

+4

इस उत्तर के दूसरे भाग के आगे, ' '' .config' तत्व में भी देखें - यह आपको असेंबली – Basic

2

परियोजना peoperties में संदर्भ पथ सेट करें।

आप यह भी निर्दिष्ट कर सकते हैं कि प्रोजेक्ट peoperties में आउटपुट पथ निर्दिष्ट करके आपका संकलित exe कहां जाता है।

0

हाँ यह संभव है, आप इसे अपने एमएसबिल्ड स्क्रिप्ट में करेंगे। जबकि मैं तुम्हें एक सटीक जवाब नहीं दे सकते हैं, अतः Copy all files and folders using msbuild

1

आप यहाँ परियोजना संदर्भ के आयोजन के लिए सर्वश्रेष्ठ अभ्यास: http://codebetter.com/patricksmacchia/2009/01/11/lessons-learned-from-the-nunit-code-base/

अध्याय के तहत देखो "VisualStudio परियोजना संदर्भ + कॉपी स्थानीय सच विकल्प बुराई है!"

+0

संदर्भित पृष्ठ से उद्धरण खोजने के लिए अन्य (उप) निर्देशिका निर्दिष्ट करने की अनुमति देता है: "असेंबली nunit.core VisualStudio के साथ NUnit समाधान संकलित करते समय .dll को 21 बार डुप्लिकेट किया गया है! इसका मतलब है कि इसे सी # कंपाइलर द्वारा 21 बार कॉपी/लोड/पार्स किया जाना चाहिए जो स्पष्ट रूप से ऐसे मामले के लिए कैश/हैशकोड अनुकूलन के साथ नहीं आता है। " लेकिन यह भी "और वास्तव में, न्यूटिट का कोड बहुत अच्छी तरह से स्तरित है। यह असेंबली बनाने के शुरुआती फैसले का परिणाम है।" इसलिए, मूल रूप से संकलन समय के खर्च पर बेहतर कोड की दिशा में बहुत सारे असेंबली मार्गदर्शिकाएं होती हैं। इतना बुरा सौदा नहीं है। –

4

सही उत्तर पहले दिए गए थे। मैं बस उल्लेख करूंगा कि PrettyBin नामक एक nuget पैकेज है।

इसे अपने स्टार्टअप प्रोजेक्ट पर इंस्टॉल करें। डीएलएल और एक्सएमएल एक lib फ़ोल्डर में जाएंगे और यदि आप कस्टमाइज़ नहीं करना चाहते हैं तो आपके पास एक कामकाजी उदाहरण होगा।

+0

अब तक का सबसे आसान समाधान है कि बस काम करता है! धन्यवाद! – mandarin

+1

मेरे पास पोस्ट-बिल्ड इवेंट हैं जो मेरी बिल्ड निर्देशिका की सामग्री को .zip में कॉपी करते हैं। PrettyBin इसकी 'सफाई' करने से पहले ये पोस्ट-बिल्ड इवेंट चलने लगते हैं। क्या आप जानते हैं कि पोस्ट-बिल्ड इवेंट से पहले मैं प्रीटीबीन कैसे दौड़ सकता हूं? – jenovachild

+0

@jenovachild यह शायद अब प्रासंगिक नहीं है, लेकिन अगर कोई अभी भी सोच रहा है: PrettyBin केवल .csproj फ़ाइल के लिए बिल्ड चरण के बाद अतिरिक्त जोड़ता है। यदि आपको कुछ विशिष्ट फ़ाइल के पहले/बाद में चलाने की आवश्यकता है, तो बस अपनी प्रोजेक्ट को अनलोड करें, .csproj फ़ाइल खोलें और AfterBuild ईवेंट के ऑर्डर को संशोधित करें। – Kajiyama

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

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