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.

Другие вопросы по тегам