2010-01-26 15 views
6

में तृतीय-पक्ष DLL की प्रतिलिपि बनाने से बचें मेरे पास एक दृश्यमान स्टूडियो (2008) में बनाया गया एक सी ++ एप्लिकेशन है और बूस्ट डीएलएल के लिंक हैं। डिबगिंग करते समय, ऐसा लगता है कि मुझे बूस्ट डीएलएल को डीबग फ़ोल्डर में कॉपी करने की आवश्यकता है, इसलिए आईडीई में जो एक्सई चल रहा हूं, उससे लिंक हो सकता है। मैं डीएलएल की प्रतिलिपि बनाने के लिए एक पोस्ट-बिल्ड चरण का उपयोग कर सकता था, लेकिन मैं सोच रहा था कि विजुअल स्टूडियो में कोई सेटिंग है या नहीं, जो डीबगिंग के दौरान डीएलएल के लिए अतिरिक्त खोज पथ दे सकती है?डीबग फ़ोल्डर

+0

http://stackoverflow.com/questions/1776060/how-to-make-visual-studio-copy-dll-to-output-directory –

+0

संदर्भित प्रश्न एक का उपयोग कर से संबंधित है: यहाँ एक अच्छा व्याख्या दी गई है पोस्ट-बिल्ड चरण, जिसे मैं टालना चाहता हूं। – Permaquid

+1

जेरेडपार ने कुछ विजुअल स्टूडियो-व्यापी लाइब्रेरी खोज स्थान की तलाश करने के बजाय पर्यावरण को नियंत्रित करने के संकेत दिए। यह पता चला है कि एक दृश्य स्टूडियो सेटिंग है जो वास्तव में वही प्रदान करती है जो (स्पष्ट रूप से) पाथ पर्यावरण चर के लिए एक और पथ जोड़कर: कॉन्फ़िगरेशन गुण> डिबगिंग | वातावरण। यह प्रति परियोजना है, और आप पर्यावरण चर का उपयोग कर सकते हैं। एकमात्र गायब टुकड़ा दस्तावेज है जो वर्णन करता है कि डिबगिंग पर्यावरण जो मैं जोड़ना चाहता हूं वह मौजूदा में विलय हो गया है। – Permaquid

उत्तर

4

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

वीएसएल के भार को प्रभावित करने वाला मुख्य तरीका उन्हें बिल्ड आउटपुट निर्देशिका में कॉपी करने के आधार पर है। यह आम तौर पर वह निर्देशिका है जिसमें एप्लिकेशन चलाया जाता है और इसलिए ओएस आवश्यक पथों के लिए खोज करेगा पथों में से एक है।

कुछ वस्तुओं द्वारा ओएस खोजों को किस निर्देशिका में नियंत्रित किया जाता है। बदलने के लिए सबसे आसान पर्यावरण परिवर्तनीय है (LIBPATH मुझे विश्वास है)। डीबग मोड में आप अपनी पर्यावरण निर्देशिका को इंगित करने के लिए इस पर्यावरण चर को बदल सकते हैं और वहां से डीएलएल लोड कर सकते हैं।

कुछ भी नहीं है जो आप सीधे विजुअल स्टूडियो में सेट कर सकते हैं।

+0

ऐसा लगता है कि आप पर्यावरण को PATH = $ (PATH) के रूप में सेट करके डीबग समय पर पर्यावरण को बदल सकते हैं; <आपका अतिरिक्त पथ> जहां $() वाक्यविन्यास का उपयोग करके संदर्भित पर्यावरण चर शामिल हो सकते हैं। आपको मर्ज = हां भी चाहिए। यदि कोई विवरण है जो विवरण बताता है तो मुझे दिलचस्पी होगी। – Permaquid

+0

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

1

डीएलएल के लिए विंडोज़ पर बहुत सारे विकल्प नहीं हैं जो पूरी तरह से EXE से जुड़े हुए हैं। EXE के समान फ़ोल्डर में DLL को संग्रहीत करने से छोटा, आप इसे उस निर्देशिका में संग्रहीत कर सकते हैं जो PATH पर्यावरण चर पर सूचीबद्ध है। केवल सी: \ windows \ system32 सूचीबद्ध होने की गारंटी है, आप उचित रूप से उस फ़ोल्डर का उपयोग नहीं कर सकते हैं। एक इंस्टॉलर जो सिस्टम पर्यावरण को बदलता है, काम करेगा, अभी भी उचित नहीं है।

डीएलएल को WinSxS साइड-बाय-साइड कैश में स्टोर करने का एकमात्र असली विकल्प है। आपको एक मैनिफेस्ट लिखना होगा ताकि विंडोज़ डीएलएल पा सके। और आपको WinSxS में DLL डालने के लिए एक इंस्टॉलर लिखना होगा। दस्तावेज़ीकरण की गुणवत्ता को देखते हुए, आपको वास्तव में ऐसा करना होगा, वास्तव में ऐसा करना चाहते हैं।

यदि यह केवल डीबगिंग के लिए एक विचार है तो शायद यह वास्तव में आपके देव मशीन पर पथ बदलने के लिए इतना बड़ा सौदा नहीं है। नियंत्रण कक्ष, सिस्टम एप्लेट का प्रयोग करें।