2013-05-07 6 views
17

मेरे पास दो परियोजनाएं हैं। पहला विंडोज़ फॉर्म एप्लीकेशन प्रोजेक्ट है और दूसरा क्लास लाइब्रेरी प्रोजेक्ट है। Сlass लाइब्रेरी प्रोजेक्ट FANN के साथ काम करता है। विंडोज फॉर्म स्टार्टअप प्रोजेक्ट है।बाह्य देशी निर्भरता डीएल कैसे जोड़ें?

मेरे पास FANN के साथ काम करने के लिए Fann.Net.dll and fanndoubleMT.dll होना चाहिए। मैंने इन पुस्तकालयों को डाउनलोड किया और समाधान की जड़ में स्थित lib फ़ोल्डर में डाल दिया।

मैंने कक्षा पुस्तकालय प्रोजेक्ट में बाहरी dll के रूप में Fann.Net.dll को जोड़ा। मैंने परियोजना संकलित की। मुझे एक त्रुटि मिली है जो "DLL 'fanndoubleMT.dll लोड करने में असमर्थ है। मैंने Windows_Forms_Aplication \ bin \ Debug फ़ोल्डर में fanndoubleMT.dll जोड़कर इस त्रुटि को ठीक किया है।

मुझे लगता है कि यह समस्या का एक भयानक समाधान है, क्योंकि मैं Git उपयोग करें, और हर बार जब आप नए कार्यस्थल पर इस फ़ोल्डर में dll ट्रांसफर करने होंगे।

निष्ठा से

, डेनिस।

उत्तर

24

आप इस कोशिश कर सकते हैं: के बजाय

  1. जोड़ें/मौजूदा आइटम, संदर्भ जोड़ें।
  2. लिंक के रूप में जोड़ें का उपयोग करें।
  3. सुनिश्चित करें कि आइटम को फ़ोल्डर में कॉपी किया जाना है। वीएस में लाइब्रेरी की संपत्ति में, नई बिल्ड की प्रतिलिपि बनाने के लिए सामग्री को बिल्ड करें और आउटपुट निर्देशिका में कॉपी करें।
  4. हो गया। पुनर्निर्माण और परीक्षण।

लिंक http://social.msdn.microsoft.com/Forums/en-US/1b1b316a-8648-4243-a651-84de51fd2508/reference-native-dll-from-managed-c-project?forum=vssmartdevicesvbcs लिंक में सुझाया गया है।

4

आप नहीं अप्रबंधित DLLs के लिए 'संदर्भ जोड़ें' कर सकते हैं। एक समाधान एक जोड़ने के लिए है पोस्ट बिल्ड इवेंट आपके विंडोज फॉर्म प्रोजेक्ट। कुछ ऐसा: xcopy .. \ lib \ fanndoubleMT.dll $ (TargetPath) पोस्ट बिल्ड इवेंट भी निष्पादित कर सकता है एक .cmd या .bat फ़ाइल

तुम अब भी कामयाब रहे विधानसभा के लिए संदर्भ की जरूरत है, 'Fann.Net.dll'

6

आप मूल डेल को एक लिंक किए गए आइटम के रूप में जोड़ सकते हैं, और "का उपयोग करें यदि" कॉपी करें।
देशी डीएलएस के साथ समस्या यह है कि कभी-कभी आप प्रोजेक्ट की कॉन्फ़िगरेशन (डीबग/रिलीज या प्लेटफॉर्म) के अनुसार विभिन्न डीएलएस का उपयोग करना चाहेंगे।

आप परियोजना की .csproj को संपादित करने और सशर्त देशी dll लिंक कर सकते हैं:

<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Win32' "> 
    <Content Include="..\..\..\..\..\bin\Win32\Release\fanndoubleMT.dll"> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Win32' "> 
    <Content Include="..\..\..\..\..\bin\Win32\Debug\fanndoubleMT_d.dll"> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
    </ItemGroup> 
    <ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' "> 
    <Content Include="..\..\..\..\..\bin\x64\Debug\fanndoubleMT_d.dll"> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
    </ItemGroup> 
    <ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' "> 
    <Content Include="..\..\..\..\..\bin\x64\Release\fanndoubleMT.dll"> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
    </ItemGroup> 

नोट प्रतिलिपि विकल्प PreserveNewest जो "कॉपी करता है, तो नए" का अर्थ है पर सेट है।

+0

आप शामिल मूल्य में $ (कॉन्फ़िगरेशन) \ $ (प्लेटफ़ॉर्म) मैक्रोज़ का भी उपयोग कर सकते हैं। फिर आप एक मैक्रो बना सकते हैं जो डीबग पर सशर्त है जो "_d" (और गैर-डीबग में कुछ भी नहीं) तक फैलता है ताकि इसे केवल एक आइटम समूह में कम किया जा सके। – kornman00

-1
  1. सही अपनी परियोजना पर क्लिक करें
  2. चुनें जोड़ कर संदर्भ ...
  3. ब्राउज़ पर संदर्भ प्रबंधक खिड़की क्लिक में ... (तल पर स्थित)।
  4. अपना .dll ढूंढें और फिर जोड़ें दबाएं।
+1

इस तरह से अप्रबंधित डीएलएस जोड़ना संभव नहीं है –

0

dll परियोजना बिन फ़ाइल में नहीं है, तो आप dll कॉपी करने के लिए अनुमति चाहिए।

  1. अधिकार अपने dll पर क्लिक करें

  2. क्लिक करें गुण

  3. आउटपुट निर्देशिका को कॉपी है की नकल न करें, का चयन कॉपी हमेशा

  4. परियोजना के पुनर्निर्माण । यह दिखाई देगा।

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