2012-06-07 4 views
5

Мы создаем веб-приложение (C# .NET), которое использует неуправляемые библиотеки в форме обертки Emgu opencv. Мы заставляем сборку быть в 32-битной (x86), и мы используем 32-разрядную версию Emgu.OpenCV Неустановленные DLL не найдены asp.net

Все это работает хорошо на локальную сборку, но когда публикуется на нашем веб-сервере OpenCV Dll (s) не нагрузка:

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 файлы в отдельном каталоге и поставить путь к этому каталогу в переменную окружения пути и перезапустить WebService.
  • Испытано позволяет ли конфигурация сервера для неуправляемого выполнения кода (да)
  • Ввод неуправляемый OpenCV библиотеки DLL в system32 \ Inetsrv и Syswow64 \ Inetsrv каталоги
  • Puting неуправляемый OpenCV DLL файлы в подкаталоге «x86» в в , прежде чем упомянутые папки

Я понимаю: http://msdn.microsoft.com/en-us/library/ms366723.aspx

является причиной всех проблема, однако я не понимаю, почему редактирование переменной пути для включения правильного пути, содержащего Dll, не решает ничего.

Последнее полезное сообщение об этой проблеме было в 2008 году, однако не было доказано, что решение, предлагаемое без дурака, было предложено, так что вся помощь очень ценится!

+0

Являются ли DLL зарегистрированными на машинах разработки? i.e через regsvr32 Установлен ли пул приложений в режиме 32BIT? –

+0

DLL не зарегистрированы на машинах разработки (так что ситуация на сервере разработки и веб-сервере одинакова), а пул приложений настроен на разрешение 32-разрядных приложений (IIS7) – Arthur

+0

, если вы используете Depends для opencv_core240.dll, все DLL-файлы перечислены доступно на веб-сервере? –

ответ

0

Из вашего описания ошибки и проверок, которые вы уже выполнили, похоже, что вы не установили MSVCRT.

+0

Спасибо за ваш ответ, однако я проверил и MSVCRT установлен на веб-сервере. – Arthur

+0

Создайте папку x86 внутри папки bin и попытайтесь скопировать DLL-файлы opencv, такие как opencv_core240.dll и другие. Это может исправить ошибку модуля. –

+0

Должен был упомянуть об этом раньше - но я тоже это пробовал, без всякой удачи – Arthur

2

Убедитесь, что tbb.dll также находится на пути, так как opencv_core240.dll имеет отношение к этому. Вы можете найти tbb.dll в opencv/build/common/tbb.

+0

Спасибо, у меня была такая же проблема с OpenCvSharp 2.4 (вместо Emgu и на локальной машине), и это решило проблему для меня. – Phasma

0

Я столкнулся с той же проблемой несколько дней назад, я пробовал все, что я знаю, но ничего не помогло решить проблему. EmguCV отлично работает на моем 64-битном компьютере под управлением Windows 8, но сервер (Windows Web Server 64 бит).

Но проблема была решена после того, как я сделал некоторые действительно случайные питания следующим образом: Сервер имеет Visual C++ 2008 Продолжительность установлен ранее, но опять-таки

  1. я установил Visual C++ 2010 x86.
  2. КапремонтVisual C++ 2008 x86 Runtime installation

и исправили проблему. Я не могу объяснить, как это произошло, но я рад, что проблема решена после двух дней случайного эксперимента.

1

В моем случае «npp32_xx_x.dll» (xx_x - версия нет, 32 - 32-битная архитектура) решила проблему. Итак, вы можете попробовать поместить эту dll в свои проекты из папки для запуска приложений для выигрышей и эквивалентной папки в веб-приложениях. dll - библиотека НПП «Невадиа Куда».

0

Чтобы решить эту проблему, поставьте nvcuda.dll в /bin папка на веб-сервере. Убедитесь, что nvcuda.dll должен быть x86. Архитектура совпадает с сервером или x64, если веб-сервер имеет x64. Архитектура.

В будущем посмотрите другие зависимости в Dependence Walker http://www.dependencywalker.com/ и поместите эту библиотеку с родительскими библиотеками.

Смежные вопросы