Неуправляемые библиотеки DLL не загружаются на сервер ASP.NET - PullRequest
66 голосов
/ 05 декабря 2008

Этот вопрос относится к веб-сайту ASP.NET, первоначально разработанному в VS 2005, а теперь и в VS 2008.

Этот веб-сайт использует две неуправляемые внешние библиотеки DLL, которые не являются .NET, и у меня нет исходного кода для их компиляции, и я должен использовать их как есть.

Этот веб-сайт работает нормально из Visual Studio, правильно находя и обращаясь к этим внешним DLL. Однако, когда веб-сайт публикуется на веб-сервере (работающем под управлением IIS6 и ASP.NET 2.0), а не на компьютере разработчика, он не может найти эти внешние библиотеки DLL и получить к ним доступ, и я получаю следующую ошибку:

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

Внешние библиотеки DLL находятся в каталоге bin веб-сайта вместе с управляемыми библиотеками DLL, которые обертывают их, и всеми остальными библиотеками DLL для веб-сайта.

Поиск этой проблемы показывает, что многие другие люди, похоже, сталкиваются с такой же проблемой при доступе к внешним не .NET DLL с веб-сайтов ASP.NET, но я не нашел решения, которое работает.

Я пробовал следующее:

  • Запуск DEPENDS для проверки зависимостей, чтобы установить, что первые три находятся в каталоге System32 в пути, последний находится в .NET 2 основа.
  • Я поместил две библиотеки DLL и их зависимости в System32 и перезагрузил сервер, но сайт по-прежнему не удалось загрузить эти внешние библиотеки DLL.
  • Предоставил полные права ASPNET, IIS_WPG и IUSR (для этого сервера) на каталог bin веб-сайта и перезагрузился, но веб-сайт все еще не мог загрузить эти внешние библиотеки DLL.
  • Добавлены внешние DLL в качестве существующих элементов в проекты и установлены их свойство «Копировать в вывод» в «Копировать всегда» и веб-сайт все еще не могу найти библиотеки DLL.
  • Также установите для их свойства «Build Action» значение «Embedded resource» и веб-сайт все еще не может найти библиотеки DLL.

Любая помощь с этой проблемой будет принята с благодарностью!

Ответы [ 11 ]

0 голосов
/ 01 июля 2018

На Application_start используйте это: (при необходимости измените папки / bin / x64 и bin / dll / x64)

String _path = String.Concat(System.Environment.GetEnvironmentVariable("PATH")
                ,";"
                , System.Web.Hosting.HostingEnvironment.MapPath("~/bin/x64")
                ,";"
                , System.Web.Hosting.HostingEnvironment.MapPath("~/bin/dll/x64")
                ,";"
                );
            System.Environment.SetEnvironmentVariable("PATH", _path, EnvironmentVariableTarget.Process);
...