मैं Visual Studio में DLL फ़ाइल के लिए पथ कैसे सेट करूँ?


130

मैंने एक एप्लिकेशन विकसित किया जो DLL फ़ाइल पर निर्भर करता है। जब मैं अपने आवेदन को डीबग करता हूं, तो एप्लीकेशनवॉल्ड शिकायत करता है कि:

"यह एप्लिकेशन प्रारंभ करने में विफल रहा है क्योंकि xxx.dll नहीं मिला था।"

इसलिए मुझे DLL फ़ाइल को मेरी .vcproj फ़ाइल के समान निर्देशिका में कॉपी करना होगा।

क्या DLL फ़ाइल को देखने के लिए प्रोजेक्ट सेट करने का एक तरीका है (अधिमानतः) कुछ सापेक्ष पथ या (पसंदीदा नहीं) कुछ निरपेक्ष पथ?

इसी तरह की अवधारणा हम परियोजना सेटिंग्स में शामिल और पुस्तकालय पथ को कैसे सेट करते हैं।

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

जवाबों:


196
  1. परियोजना गुणों पर जाएं (Alt + F7)
  2. डीबगिंग के तहत, दाईं ओर देखें
  3. एक पर्यावरण क्षेत्र है।
  4. वहाँ अपने रिश्तेदार पथ जोड़ें (vcproj फ़ोल्डर के सापेक्ष) यानी .. \ कुछ-ढांचा \ lib को जोड़कर PATH=%PATH%;$(ProjectDir)\some-framework\libया पथ के लिए प्रीपेडिंग करकेPATH=C:\some-framework\lib;%PATH%
  5. फिर से F5 (डिबग) मारो और इसे काम करना चाहिए।

15
पर्यावरण क्षेत्र NAME = VALUE अर्धविराम-सीमांकित जोड़े लेता है। वीएस डीबगर को डीएलएल के लिए अतिरिक्त स्थानों की खोज करने के लिए पेट वैरिएबल के लिए अपील करें: पेट =% पेटी%; $ (प्रोजेक्टडिअर) लिबास
ब्रेंट फॉस्ट

1
क्या रिलीज़ बिल्ड के लिए भी ऐसा ही तरीका है?
नारेक

मुझे dll पथ को $ (LibraryPath) चर में जोड़ने की आवश्यकता है (या इसे विन्यास गुणों पर लाइब्रेरी निर्देशिकाएँ के तहत सूची में शामिल करें-> VC ++ निर्देशिकाएँ सेटिंग)।
फोस्टर बोंडॉगल

1
@ SlippD.Thompson हाँ, आप सही हैं। लेकिन आप इसके बजाय Alt + p, p का उपयोग करके एक ही चीज़ प्राप्त कर सकते हैं।
जेनिक्स

1
@ SlippD.Thompson आह, आपकी टिप्पणी को फिर से पढ़ते हुए, मुझे लगता है कि मुझे गलत समझा कि आपका क्या मतलब है। हाँ मैं सहमत हूँ। लेकिन कम से कम, कुछ हॉटकीज़ दृश्य स्टूडियो में कभी नहीं बदले जाते हैं, और 'Alt + p, p' उनमें से एक है। यह 'ऑल्ट + एफ 7' के साथ था, जिसका मतलब अब कुछ और है जैसा कि आप जानते हैं। इसके अलावा, 'Alt + p, p' का अर्थ है 'प्रोजेक्ट मेनू> * गुण'।
19ix में जेनिक्स

7

लोडर को कॉल करने पर लोडर () का उपयोग करने वाले खोज पथ को SetDllDirectory () फ़ंक्शन का उपयोग करके बदला जा सकता है । इसलिए आप इसे लोड करने से पहले बस इसे कॉल कर सकते हैं और अपनी निर्भरता के लिए रास्ता जोड़ सकते हैं।

DLL सर्च ऑर्डर भी देखें ।


7

परियोजना गुणों के माध्यम से जाओ -> संदर्भ पथ

फिर DLL के साथ फ़ोल्डर जोड़ें


4
कृपया कई प्रश्नों के समान उत्तर न दें। एक अच्छा उत्तर पोस्ट करें, फिर डुप्लिकेट के रूप में अन्य प्रश्नों को बंद करने के लिए वोट / ध्वज दें। यदि प्रश्न डुप्लिकेट नहीं है, तो प्रश्न के अपने उत्तरों को दर्जी करें।
ड्यूरोन 597

1
अब तक का सबसे अच्छा जवाब :)
रथमा

2
यह दृश्य स्टूडियो 2015 में C ++ प्रोजेक्ट में उपलब्ध नहीं लगता है। Visual Studio संस्करण और प्रोजेक्ट प्रकार का कौन सा संयोजन इस विकल्प का समर्थन करता है?
फिलिप बैर्टेक

OP का प्रश्न C ++ के बारे में था लेकिन यह उत्तर C # के लिए है।
जेनिक्स

मेरे साथ C # और VS2017 के लिए काम नहीं किया
mherzog

4

Working Directoryडिबगिंग विकल्पों के तहत एक और संभावना यह होगी कि वह निर्देशिका जो डीएलएल की है।

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


क्या होगा यदि मैं 2 dll पर निर्भर करता हूं, हर एक अपनी निर्देशिका में रहता है? (मैंने अपना प्रश्न ऊपर सरलीकृत किया)
सिवाबुध

मुझे नहीं लगता कि एक से अधिक निर्देशिका के लिए इस समाधान को काम करना संभव होगा।
मार्क विल्किन्स

3

अपने प्रोजेक्ट गुणों में (प्रोजेक्ट पर राइट क्लिक करें, प्रॉपर्टी बटन पर क्लिक करें) ▶ कॉन्फ़िगरेशन प्रॉपर्टीज properties बिल्ड इवेंट्स Build पोस्ट बिल्ड इवेंट्स। कमांड लाइन।

संपादित करें और कमांड लाइन में एक निर्देश जोड़ें। उदाहरण के लिए botan.dll को स्रोत पथ से उस स्थान पर कॉपी करें जहां प्रोग्राम निष्पादित किया जा रहा है।

copy /Y "$(SolutionDir)ProjectDirs\x64\Botan\lib\botan.dll" "$(TargetDir)"

परियोजना के गुण


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

अन्य विकल्पों ने मेरे लिए काम नहीं किया, केवल यह एक, लेकिन ऐसा लगता है कि दूसरों को जाने का सही तरीका होना चाहिए।
rjferguson

-1

मुझे पता है कि इस सवाल का जवाब सालों पहले दिया गया था, लेकिन मेरे जैसे उन लोगों के लिए जिन्हें डिबगर आवेदन शुरू करने के लिए बदलने की जरूरत है, प्रोजेक्ट प्रॉपर्टीज के तहत कमांड प्रॉपर्टी को बदलें -> डिबगिंग।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.