मैं दो परियोजनाओं के साथ समाधान बनाने के लिए विजुअल स्टूडियो 2008 का उपयोग कर रहा हूं: एक सी # कंसोल ऐप और सी ++ डीएलएल। मैं ऐप को पी/Invoke का उपयोग कर डीएल से एक समारोह कॉल करने के लिए चाहता हूँ। इसलिए मैं सी # ऐप के संदर्भ के रूप में डीएलएल जोड़ने की कोशिश कर रहा हूं। लेकिन जब मैं रेफरेंस कमांड कमांड का प्रयास करता हूं, तो विजुअल स्टूडियो मुझे तब तक नहीं करने देगा जब तक कि मैं डीएलएल (कॉन्फ़िगरेशन प्रॉपर्टीज: जनरल) के तहत/clr प्रॉपर्टी सेट नहीं करता। अब, मैंने सोचा था कि पी/Invoke सादे पुराने Win32 dlls संभाल सकता है। दरअसल, अगर मैं बिना डीएल/क्लियर के अपने डीएलएल का निर्माण करता हूं और इसे हाथ से बिन/डीबग पर कॉपी करता हूं, तो ऐप ठीक चलाता है। तो संदर्भ के रूप में डीएलएल जोड़ने के लिए/clr क्यों आवश्यक है? और यदि वीएस मुझे इसे जोड़ने नहीं देगा, तो क्या कुछ (साफ) कामकाज है ताकि मेरा ऐप डीएल पा सके?एक सी # ऐप से एक डीएलएल के बिना संकलित/सीएलआर में एक संदर्भ जोड़ें?
मुझे लगता है कि किसी के पास एक समान समस्या थी (हालांकि तीसरे पक्ष के डीएल के साथ): Unable to add a DLL Reference to VS 2008 वह जवाब एक रैपर बनाने के लिए था। लेकिन यह वास्तव में जरूरी नहीं है, क्योंकि ऐप सिर्फ डीएलएल का उपयोग कर सकता है; यह सिर्फ संदर्भ संदर्भ जोड़ें जो काम नहीं करता है। और इसके अलावा, क्या रैपर कोड को डीएल के संदर्भ की आवश्यकता नहीं होगी, जैसा कि पहले की तरह ही समस्या को उठा रहा है? मुझे वास्तव में एक ऐसा जवाब पसंद आएगा जिसमें एक रैपर लिखना शामिल न हो।
मैंने इस कमांड लाइन का उपयोग कर सी # ऐप के लिए प्री-बिल्ड चरण लिखा: "$ (SolutionDir) डीबग \ MathDll.dll" $ (TargetDir) "कॉपी करें। हां, मैं चाहता हूं कि "संदर्भ जोड़ें" कार्यक्षमता काम करे, क्योंकि अब मुझे इसे बनाए रखना है, और मुझे लगता है कि यह रिलीज बिल्ड के लिए अलग होगा .... मैं वास्तव में नहीं देखता कि "संदर्भ जोड़ें" क्यों नहीं होना चाहिए इस तरह की चीज को संभालें। –
मुझे बस ऐसा करने का थोड़ा साफ तरीका मिला। प्री/पोस्ट-बिल्ड डीओएस कमांड का उपयोग करने के बजाय, मैंने सी # प्रोजेक्ट में डीएल को "मौजूदा आइटम" के रूप में जोड़ा। फिर इसके गुणों के तहत, मैंने "आउटपुट निर्देशिका में कॉपी करें" को "नया अगर कॉपी करें" पर सेट किया है। (इसकी "बिल्ड एक्शन" "सामग्री" है।) यह अभी भी मुझे थोड़ा सा हैकिश लगता है, लेकिन कम से कम यह डीबग-बनाम रिलीज इश्यू को ठीक करता है, और यह स्पॉट करने के लिए थोड़ा आसान है। –
ओह - मुझे एहसास हुआ कि मेरा दूसरा कामकाज डीबग-बनाम रिलीज इश्यू को हल नहीं करता है, क्योंकि मैंने डीबग फ़ोल्डर से डीएलएल का संदर्भ दिया है। दूसरी तरफ, पहला वर्कअराउंड "$ (SolutionDir) $ (कॉन्फ़िगरेशन) \ MathDll.dll $" (targetDir) "प्रतिलिपि बनाने के लिए कमांड को बदलकर इस समस्या को संभाल सकता है। –