2012-06-07 23 views
5

नहीं मिला है हम एक वेब एप्लिकेशन (सी # .NET) बना रहे हैं जो इमगु ओपनसीवी रैपर के रूप में अप्रबंधित पुस्तकालयों का उपयोग करता है। हम 32-बिट (x86) में निर्माण को मजबूर कर रहे हैं, और हम इमू के 32-बिट संस्करण का उपयोग कर रहे हैं।ओपनसीवी अप्रबंधित DLLs asp.net

यह सब अच्छा काम करता है स्थानीय बनाता है पर, लेकिन जब हमारे वेब सर्वर पर प्रकाशित किया जा रहा openCV Dll (रों) लोड करने में विफल:

System.DllNotFoundException 
Unable to load DLL 'opencv_core240': The specified module could not be found. (Exception from HRESULT: 0x8007007E) 

System.TypeInitializationException: The type initializer for 'Emgu.CV.CvInvoke' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'opencv_core240': The specified module could not be found. (Exception from HRESULT: 0x8007007E) 
    at Emgu.CV.CvInvoke.cvRedirectError(CvErrorCallback errorHandler, IntPtr userdata, IntPtr prevUserdata) 
    at Emgu.CV.CvInvoke..cctor() 
    --- End of inner exception stack trace --- 
    at Emgu.CV.CvInvoke.cvCreateImageHeader(Size size, IPL_DEPTH depth, Int32 channels) 
    at Emgu.CV.Image`2.AllocateData(Int32 rows, Int32 cols, Int32 numberOfChannels) 
    at Emgu.CV.Image`2.set_Bitmap(Bitmap value) 
    at Emgu.CV.Image`2..ctor(Bitmap bmp) 

मैं निम्नलिखित बातें है कि मैं stackoverflow और अन्य पर मिल गया है की कोशिश की सूत्रों का कहना है:

  • एक अलग निर्देशिका में अप्रबंधित OpenCV Dll के रखो और पथ वातावरण चर में इस निर्देशिका में पथ रखा, और वेब सेवा को पुनरारंभ करें।
  • परीक्षण किया गया है कि सर्वर config अप्रबंधित कोड निष्पादन के लिए अनुमति देता है (हाँ)
  • लाना अप्रबंधित OpenCV Dll system32 \ inetsrv में है और SysWOW64 \ inetsrv निर्देशिका
  • Puting अप्रबंधित OpenCV Dll के उप-निर्देशिका '86' में में पहले उल्लेख किया फ़ोल्डरों

मैं समझता हूँ कि यह: http://msdn.microsoft.com/en-us/library/ms366723.aspx

सभी का कारण है परेशानी, हालांकि मुझे समझ में नहीं आता कि डीएलएस युक्त सही पथ को शामिल करने के लिए पथ चर का संपादन क्यों कुछ हल नहीं करता है।

2008 में इस मुद्दे के बारे में अंतिम उपयोगी पोस्ट 2008 में था, हालांकि कोई मूर्ख प्रमाण समाधान में अभी तक बेन की पेशकश नहीं की गई है, इसलिए सभी मदद की बहुत सराहना की जाती है!

+0

क्या डीएलएल विकास मशीनों पर पंजीकृत है? i.e regsvr32 के माध्यम से 32 बिट मोड में चलाने के लिए एप्लिकेशन पूल सेट है? –

+0

डीएलएल ने विकास मशीनों पर बेन पंजीकृत नहीं किया है (इसलिए स्थिति विकास और वेबसर्वर पर समान है), और एप्लिकेशन पूल 32 बिट ऐप्स (आईआईएस 7) – Arthur

+0

को अनुमति देने के लिए सेट है यदि आप ओपनसीवी_कोर 240.dll पर निर्भर करते हैं तो सभी डीएल सूचीबद्ध हैं वेब सर्वर पर उपलब्ध है? –

उत्तर

0

आपके त्रुटि विवरण और चेक जो आपने पहले से ही किया है, ऐसा लगता है कि आपने MSVCRT स्थापित नहीं किया है।

+0

आपके उत्तर के लिए धन्यवाद, हालांकि मैंने जांच की है और वेबसर्वर पर एमएसवीसीआरटी स्थापित है। – Arthur

+0

अपने बिन फ़ोल्डर के अंदर एक x86 फ़ोल्डर बनाएं और opencv dlls जैसे opencv_core240.dll और अन्य को कॉपी करने का प्रयास करें। यह मॉड्यूल को त्रुटि नहीं मिली त्रुटि को ठीक कर सकता है। –

+0

पहले उल्लेख किया जाना चाहिए था - लेकिन मैंने कोशिश की कि बिना किसी किस्मत के दुर्भाग्य से – Arthur

2

सुनिश्चित करें कि tbb.dll पथ में भी है, क्योंकि opencv_core240.dll पर निर्भरता है। आप openbv/build/common/tbb के अंतर्गत tbb.dll पा सकते हैं।

+0

धन्यवाद, मुझे ओपनसीवीशर्प 2.4 (इमू के बजाय, और स्थानीय मशीन पर) के साथ एक ही समस्या थी और इससे मेरे लिए समस्या हल हो गई। – Phasma

0

मुझे कुछ दिनों पहले एक ही समस्या का सामना करना पड़ा, मैंने अपने ज्ञान में सब कुछ करने की कोशिश की, लेकिन इस मुद्दे को ठीक करने में कुछ भी मदद नहीं मिली। EmguCV मेरे स्थानीय 64 बिट विंडोज 8 पीसी में ठीक काम करता है लेकिन सर्वर (विंडोज़ वेब सर्वर 64 बिट)।

लेकिन इस प्रकार के बाद मैं कुछ सही मायने में यादृच्छिक सामान किया था समस्या तय किया गया था: सर्वर विज़ुअल सी है ++ 2008 रनटाइम पहले से स्थापित है, लेकिन फिर से

  1. मैं Visual C++ 2010 x86 स्थापित।
  2. Visual C++ 2008 x86 Runtime installation

मरम्मत कि समस्या ठीक हो गई। मैं यह नहीं समझा सकता कि यह कैसे हुआ, लेकिन मुझे खुशी है कि यादृच्छिक प्रयोग के दो दिनों के बाद समस्या हल हो गई।

1

मेरे मामले में "npp32_xx_x.dll" (xx_x संस्करण संख्या 32 है, 32 बिट आर्किटेक्चर है) समस्या हल हो गई। तो आप अपने डीएल को अपनी परियोजनाओं में जीतने वाले ऐप्स और वेब ऐप्स में समकक्ष फ़ोल्डर के लिए फ़ोल्डर डालने का प्रयास कर सकते हैं। डीएलएल एनवीडिया कूडा एनपीपी लाइब्रेरी है।

0

इस समस्या को हल करने के लिए nvcuda.dll/bin वेब सर्वर पर फ़ोल्डर डालें। सुनिश्चित करें कि nvcuda.dllx86 आर्किटेक्चर सर्वर के समान है, या x64 यदि वेब सर्वर x64 आर्किटेक्चर है।

भविष्य में निर्भरता वॉकर http://www.dependencywalker.com/ में अन्य निर्भरताओं को देखें और इस डीएल को मूल पुस्तकालयों के साथ रखें।