GhostScriptSharp на Azure
Есть два признака того, что я считаю одной и той же проблемой.
Я установил GhostScriptSharp с помощью Nuget и запускаю его локально на 32-разрядной обработке в Azure Development Fabric. Все работает чудесно.
При развертывании в Azure, который является 64-разрядным, появляется следующее сообщение об ошибке.
Невозможно загрузить DLL 'gsdll32.dll': указанный модуль не найден. (Исключение из HRESULT: 0x8007007E)
Здесь я могу сказать, что есть две проблемы
- Проект не был собран с 64-битным GhostScriptSharp.cs
- Независимо от сборки gsdll32.dll или gsdll64.dll не копируются в правильную папку.
Есть ли какие-либо рекомендации, чтобы заставить это работать в развертываниях Azure?
2 ответа
Просто нужно было решить эту проблему при развертывании веб-сайта Azure для тестового сайта. Мы используем только GhostScriptSharp для функций миниатюр и не выяснили, как сделать то же самое с Ghostscript.NET, так как практические примеры легки на земле.
Сообщение об ошибке немного вводит в заблуждение. Файл не пропущен, у него просто нет доступа на чтение / запись к папке, в которой находились файлы DLL (например, к вашей папке BIN).
Если вы работаете на виртуальной машине, вы можете предоставить доступ на чтение / запись к своей папке BIN (небольшая проблема безопасности), но на бесплатных веб-сайтах Azure у вас нет этого элемента управления.
Нашим решением было поместить файлы gsdll32.dll и gsdll64.dll в App_Data
папку (которая уже имеет доступ для чтения / записи) и добавьте эту папку в места поиска DLL с помощью ядра Win32 SetDllDirectory
функция.
например, объявить это с помощью
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool SetDllDirectory(string lpPathName);
Затем, перед вызовом методов GhostscriptSharp, например, из вашего метода контроллера, добавьте App_Data
папку к путям поиска DLL, используя:
SetDllDirectory(Server.MapPath("~/App_Data/"));
После этого он снова начал работать.
Возможно, вам не хватает некоторых библиотек DLL времени выполнения Windows, которые существуют на компьютере разработчика. Они должны быть включены в ваше развертывание в Azure.