2008-09-24 18 views
8

में एक गैर- .NET निर्भरता निर्दिष्ट करना मैं पी/Invoke का उपयोग कर अपने प्रोजेक्ट से एक गैर-.NET डीएल कॉल कर रहा हूं, जिसका अर्थ है कि .dll हमेशा .exe निर्देशिका में मौजूद होना चाहिए।विजुअल स्टूडियो

क्या इस निर्भरता के विजुअल स्टूडियो को बताने का कोई तरीका है, ताकि यह स्वचालित रूप से .dll को संकलन के दौरान आउटपुट निर्देशिका में कॉपी कर दे, और सेटअप में .dll स्वचालित रूप से शामिल हो जाएगा? या मुझे इसे मैन्युअल रूप से करना है?

उत्तर

5

आप इस फ़ाइल को प्रोजेक्ट में कॉपी/लिंक कर सकते हैं, और प्रॉपर्टी विंडोज़ में "कोई भी नहीं" और "आउटपुट निर्देशिका में कॉपी करें" को "नई छवि कॉपी करें" या "हमेशा कॉपी करें" पर सेट करें।

या आप "प्री-बिल्ड इवेंट्स" & "पोस्ट-बिल्ड इवेंट्स" का उपयोग कर सकते हैं जहां आप किसी भी बैच स्क्रिप्ट निर्दिष्ट कर सकते हैं।

मैं दूसरा विकल्प prefere, क्योंकि इस तरह से पहले से अधिक लचीला है।

इसके अलावा आप एक एमएसबील्ड फ़ाइल को संशोधित कर सकते हैं और फ़ाइल की प्रतिलिपि बनाने के लिए एक कार्य जोड़ सकते हैं।

+0

धन्यवाद, पहला विकल्प यह है कि मैं क्या कर रहा था - आश्चर्य हुआ कि – Grokys

8

आप बस अपनी परियोजना में डीएलएल जोड़ सकते हैं।

उस फ़ाइल के लिए Properties फलक का चयन करें और Copy if newer को Content और Copy to Output Directory को Build Action निर्धारित किया है।

+0

बिल्ड एक्शन = "सामग्री" बिल्ड एक्शन = "कोई नहीं" किसी अन्य प्रतिक्रिया में सुझाए गए से बेहतर है। ऐसा इसलिए है क्योंकि आप सेटअप प्रोजेक्ट में आसानी से "सामग्री" फ़ाइलों को शामिल कर सकते हैं। – Joe

+0

हां, और यही कारण है कि मैंने सुझाव दिया कि मेरी प्रतिक्रिया में। –

+0

> यही कारण है कि मैंने सुझाव दिया कि मेरी प्रतिक्रिया में और मैंने आपके उत्तर को क्यों बढ़ाया :) – Joe

2

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

+0

बेहतर तरीका है तो आप मैन्युअल रूप से .csproj फ़ाइल को संपादित कर सकते हैं डीएलएल की सामग्री नोड में एक शर्त जोड़ने के लिए: <सामग्री शामिल करें = "MyDLL.Debug.dll" हालत = "$ (कॉन्फ़िगरेशन) | $ (प्लेटफ़ॉर्म) '==' डीबग | AnyCPU '" /> <सामग्री = "MyDLL.Release.dll" शर्त = "$ (कॉन्फ़िगरेशन) | $ (प्लेटफार्म) '==' रिलीज | AnyCPU '" /> वैकल्पिक रूप से, आप MyDLL को कॉपी करने के लिए प्री-बिल्ड चरण का उपयोग कर सकते हैं। वर्तमान कॉन्फ़िगरेशन के आधार पर Debug.dll या MyDLL.Release.dll MyDLL.dll पर। (मुझे लगता है कि आप वीएस में प्रोजेक्ट प्रॉपर्टी पेज के माध्यम से डीबग से रिलीज करने के लिए स्विच करके इसे करने में सक्षम होना चाहिए) – bruceboughton

+0

यहां उत्तर दिया गया http://stackoverflow.com/a/33436918/1889784 –

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