2009-10-05 12 views
6

में मूल डीएलएल की प्रतिलिपि बनाने के लिए सबसे साफ तरीका मेरे पास एक सी # जीयूआई एप्लीकेशन है जो एक प्रबंधित सी ++ प्रोजेक्ट का संदर्भ देता है, जिसके लिए 7 देशी सी ++ डीएलएल की आवश्यकता होती है। मैं इन 7 डीएलएल को अंतिम परियोजना आउटपुट में कॉपी करने के लिए सबसे साफ विधि की तलाश में हूं।.NET प्रोजेक्ट

क्या
को निर्दिष्ट सी # आवेदन करने के लिए सभी DLLs जोड़ें, काम करता है:

बिल्ड कार्रवाई == "सामग्री" आउटपुट निर्देशिका == कॉपी हमेशा "

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

क्या

  • काम नहीं करता है उपरोक्त रूपरेखाओं के साथ "आवश्यक DLLs" नाम का फ़ोल्डर के लिए इन DLLs जोड़ा जा रहा है। यह इसे आउटपुट में एक ही नाम वाले फ़ोल्डर में कॉपी करता है, जिससे उन्हें गलत स्थान पर रखा जाता है। मैं आउटपुट निर्देशिका निर्दिष्ट करने का कोई तरीका नहीं देख सकता।
  • एंबेडेड संसाधन: सी # पी/इनवॉक में, आप डीएलएल जोड़ सकते हैं जिन्हें आप एम्बेडेड संसाधनों के रूप में संदर्भित कर रहे हैं, और डीएलएल आपकी अंतिम लाइब्रेरी के अंदर एम्बेडेड हैं। मुझे प्रबंधित सी ++ में यह संभावना दिखाई नहीं दे रही है, और मुझे यह भी यकीन नहीं है कि यह संदर्भ श्रृंखलाओं के साथ काम करता है या नहीं।
  • प्रबंधित सी ++ प्रोजेक्ट के भीतर डीएलएल को सामग्री के रूप में जोड़ना। फ़ाइलों को आउटपुट निर्देशिका में कॉपी नहीं किया जाता है।

इस मामले में सबसे अच्छा समाधान क्या है? मैं प्रबंधित सी ++ प्रोजेक्ट को अपनी डीएलएल आवश्यकताओं को संभालने में सक्षम होने के लिए पसंद करूंगा, और अधिमानतः इस तरह से कि परियोजना को कई अनुप्रयोगों में इस्तेमाल होने से रोका नहीं जा सकेगा।

जहां तक ​​एक स्वच्छ परियोजना हो रही है, क्या परियोजना में सबफ़ोल्डर के भीतर मेरी सभी कोड फ़ाइलों को सम्मिलित करना बेहतर है, और डीएलएल को रूट पर पहला समाधान करने के लिए रूट पर रखना है?

समाधान:
यूसुफ के उत्तर-निर्माण सुझाव का उपयोग करना, निम्न आदेश चाल एक "आवश्यक DLLs" फ़ोल्डर का उपयोग करने से करता है।

xcopy "$ (ProjectDir) आवश्यक DLLs *। *" "$ (TARGETDIR)"/क्यू/वाई

/क्यू उत्पादन से अलग-अलग फ़ाइलों को छुपाता है, और/वाई संकेतों के ऊपर लिख को दबा ।

उत्तर

6

आप किसी निर्देशिका की सामग्री की प्रतिलिपि बनाने के लिए पोस्ट-बिल्ड ईवेंट का उपयोग कर सकते हैं (उदा।, आपकी "आवश्यक DLLs" निर्देशिका) प्रोजेक्ट की आउटपुट निर्देशिका में।

+1

मैंने किसी भी कारण से पोस्ट-बिल्ड इवेंट के बारे में भी सोचा नहीं था। यह मेरे लिए काफी अच्छा काम करता है, और मैंने प्रश्न में उपयोग किए गए सटीक पोस्ट-बिल्ड को पोस्ट किया है। धन्यवाद। –

0
  1. आप गतिशील के बजाय स्थैतिक libs के साथ काम कर सकते हैं, यह आपके डीएलएस को बड़ा कर देगा लेकिन एकाधिक के बजाय एकल डीएल केवल समय बचाता है और न केवल आपके पहलू में।
  2. एक ही निर्देशिका (प्रबंधित और अप्रबंधित) के समाधान में सभी परियोजनाओं को रूट करें।
+0

स्टेटिक libs मेरे साथ ठीक हैं, लेकिन मैनेज्ड सी ++ में उनके लिए परियोजनाओं की स्थापना करने के लिए कभी भी अच्छी किस्मत स्थापित नहीं हुई है। क्या आपके पास सलाह या संसाधन है जो इसे स्थापित करने में मेरी मदद कर सकता है? –

+0

@गार्ड आप स्थिर प्रबंधित सी ++ lib नहीं कर सकते हैं, मैंने सोचा था कि आपको libs के साथ समस्याएं थीं जिन्हें प्रबंधित सी ++ की आवश्यकता थी (वे स्थैतिक हो सकते हैं)। –

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