gsdll32.dll остается заблокированным после удаления / выхода API

Я создал конвертер, используя GhostScriptSharp для генерации полностраничных изображений файлов PDF через веб-сайт, и gsdll32.dll, кажется, остается заблокированным (равно как и файлы, которые он сгенерировал / из которых работал) всякий раз, когда я вызываю GenerateOutput().

Мой фрагмент кода:

GhostscriptSharp.GhostscriptWrapper.GenerateOutput(pdfFile, outputFile, settings);

Сразу после этого я сохраняю полученные байты в BLOB-объекте Azure. После этого я пытаюсь позвонить:

try {
    File.Delete(outputFile); // clean up if we can
}
catch { }

Что выдает исключение, потому что файл все еще заблокирован.

Затем, когда я пытаюсь собрать заново (либо через F5, либо даже в реальных ситуациях), я получаю сообщение об ошибке, в котором говорится, что он не может скопировать gsdll32.dll в папку bin, поскольку он заблокирован.

Я проверил GhostScriptSharp на соответствие API Ghostscript, и кажется, что все вызывается в правильном порядке. Я не могу объяснить, почему IIS сохраняет блокировку на gsdll32.dll, хотя.

Кто-нибудь сталкивался с этим раньше? Я не могу найти никого с подобной проблемой.

Обновление: я попытался вызвать ExitAPI/DeleteAPI во второй раз в приведенном выше улове на случай, если по какой-то причине это не потребовалось в первый раз, и он бросил AccessViolationException, Таким образом, похоже, что API завершается правильно, просто IIS не выпускает блокировки должным образом?

1 ответ

Решение

После дополнительных исследований это, по-видимому, является поведением между IIS и собственным импортом DLL. В большинстве случаев эту проблему можно избежать, выгрузив домен приложения (т. Е. Перезапустив пул приложений) перед публикацией. Это выполнимо в обычном сценарии публикации с использованием app_offline.htm, но в среде непрерывной интеграции Azure это не вариант (что печально, потому что мне пришлось отключить CI и прибегнуть к ручной публикации в моей основной ветке).

Любой дальнейший вклад в то, как я мог бы обойти это, чтобы автоматизировать сборку, был бы невероятно полезным. Единственный обходной путь, который у меня есть сейчас, заключается в том, чтобы выгрузить зависимость Ghostscript на отдельный компьютер и настроить очередь сообщений для обработки данных (тьфу).

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