2010-01-05 20 views
7

मेरे पास एक क्लास लाइब्रेरी प्रोजेक्ट है जिसे मैंने बनाया है। आइए क्लास को कॉल करें। कक्षा ए में मुझे कुछ टूल तक पहुंचने की आवश्यकता है जो dll (ToolsDLL.dll) में रहते हैं।क्या आप एक साथ डीएलएस बंडल कर सकते हैं?

ClassA में मैं परियोजना के लिए ToolsDLL.dll जोड़ा गया है और हमेशा आउटपुट निर्देशिका में कॉपी करना ToolsDLL.dll फ़ाइल का चयन किया है। इसलिए लाइब्रेरी बस ठीक और आउटपुट निर्देशिका बनाता है और आउटपुट निर्देशिका में मैं ClassA.dll को ToolsDLL.dll

के साथ देखता हूं, अगला, मैं ऐप_ए कहता हूं जो क्लासए में विधियों का उपयोग करता है। तो, मेरे App_A प्रोजेक्ट में, मैंने ClassA.dll का संदर्भ जोड़ा ताकि मैं इसका नामस्थान एक्सेस कर सकूं। सब ठीक है और अच्छा है, यह निर्माण/संकलित करता है।

समस्या है जैसे ही मैं App_A चलाता हूं और यह उस बिंदु पर जाता है जहां ToolsDLL.dll का उपयोग करने की आवश्यकता होती है, यह अपवाद फेंकता है "ToolsDLL.dll लोड करने में असमर्थ। मुझे समझ में नहीं आता कि यह कैसे संभव है उस डीएल को नहीं मिला क्योंकि यह ClassA.dll के समान निर्देशिका में है।

मुझे पता चला कि अगर मैं App_A की आउटपुट निर्देशिका में ToolsDLL.dll डालता हूं तो यह ठीक काम करता है। क्या इसके आसपास कोई रास्ता है? वहाँ कोई तरीका है कि ToolsDll.dll को किसी भी तरह ClassA.dll के साथ बंडल किया जा सकता है। कारण यह है कि मेरे ग्राहक एपीए के समान अपने स्वयं के एप्लिकेशन लिखेंगे और यह अच्छा होगा अगर उन्हें केवल अपनी परियोजना में एक फ़ाइल का संदर्भ देना पड़े और एकाधिक नहीं ।

उत्तर

12

माइक्रोसॉफ्ट से ILMerge नामक एक उपकरण है। यह शायद आप जो चाहते हैं वह करेंगे, कई असेंबली को एक फ़ाइल में बंडल करें।

पीएस: एक अन्य, काफी अक्सर आपकी समस्या के लिए इस्तेमाल किया समाधान आपके आवेदन के समाधान/परियोजना के लिए एक के बाद निर्माण घटना जोड़ने के लिए हो सकता है कि प्रतियां उत्पादन निर्देशिका के लिए खत्म हो आवश्यक ToolsDLL.dll? की रेखा के साथ कुछ:

xcopy /y /d $(SolutionDir)\lib\ToolsDLL.dll $(OutputDir)\ToolsDLL.dll 

(। माफ करना अगर मैं इसके बारे में कुछ गलत है, मैं यह मेरी स्मृति से टाइप कर रहा हूँ)

बेशक

, अपने ग्राहक भी ऐसा करना होगा। लेकिन फिर फिर उन्होंने शायद पहले यह किया है।

+0

ऐसा लगता है कि ILMerge केवल एक नेट विधानसभाओं पर इस्तेमाल किया जा सकता है। क्या वो सही है। मेरे मामले में, एक चिप निर्माण द्वारा ToolsDLL.dll मुझे प्रदान किया गया था। मुझे नहीं पता कि यह एक .NET असेंबली है या नहीं। क्या इससे कोई फर्क पड़ता है? – PICyourBrain

+0

हां, मेरा मानना ​​है कि यह केवल .NET असेंबली के लिए काम करता है। यह पता लगाने के लिए कि आपको किस प्रकार का '.dll' मिला है, शायद आप इसका उपयोग कर सकते हैं।'.dll' को आजमाने और अलग करने के लिए नेट एसडीके उपयोगिता 'ildasm'। यदि यह एक .NET असेंबली है, तो यह काम करना चाहिए; यदि इसमें देशी कोड है, तो 'ildasm' विफल होना चाहिए। – stakx

+0

मैंने विजुअल स्टूडियो में देखा है यदि मैं ToolsDll.dll पर जाता हूं -> गुणों में एक्शन नामक एक संपत्ति होती है। क्या मैं इसे एंबेडेड संसाधन में सेट कर सकता हूं? – PICyourBrain

1

आप परियोजना के लिए DLL को शामिल किया है, या आप वास्तव में इसे करने के लिए एक संदर्भ जोड़ लिया है? आपको उत्तरार्द्ध करना चाहिए, तो इस तरह की चीज आपके लिए स्वचालित रूप से देखभाल की जाती है। ऐसा लगता है कि आपने प्रोजेक्ट फ़ाइलों में वास्तविक फ़ाइल जोड़ दी है, और इसे प्रतिलिपि बनाने के लिए सेट किया है।

आप निश्चित रूप से एक एकल फाइल दृष्टिकोण चाहते हैं, तो जाहिर है ILMerge के अन्य लोगों के सुझाव ...

0

आप एक आईएल विलय उपकरण का उपयोग, या GAC में ToolsDLL.dll स्थापित या तो कर सकते हैं।

इसके अलावा, अगर आप App_A के उत्पादन को देखो, ClassA.dll पहले से ही वहाँ है कि जहां यह ToolsDLL.dll की तलाश में है,।

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

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