Abcpdf, выбрасывающий System.ExecutionEngineException - PullRequest
1 голос
/ 01 апреля 2010

У меня есть двоичный файл для нескольких файлов PDF, хранящихся в коллекции байтовых массивов.

Моя цель - объединить их в один файл .pdf с помощью abcpdf, а затем передать вновь созданный файл в объект Response на странице веб-сайта ASP.Net.

делал это так:

НАЧАТЬ ПЕТЛЯ ...

'Create a new Doc
Dim doc As Doc = New Doc

'Read the binary of the current PDF
doc.Read(bytes)

'Append to the master merged PDF doc
_mergedPDFDoc.Append(Doc)

END LOOP

Который работал нормально в 95% случаев. Время от времени, однако, создание нового объекта Doc приводило к возникновению исключения System.ExecutionEngineException и падению CLR. Похоже, это не связано с большим количеством PDF-файлов (иногда это может произойти только с 2) или с большими PDF-файлами. Это казалось почти полностью случайным.

Это известная ошибка в abcpdf, описанная (не очень хорошо) здесь Item 6.24 . Я наткнулся на полезный пост SO , в котором предлагалось использовать блок Using для объекта Doc abcpdf.

Так что теперь я делаю это:

    Using doc As New Doc
        'Read the binary of the current PDF
        doc.Read(bytes)
        'Append to the master merged PDF doc
        _mergedPDFDoc.Append(doc)
    End Using

И я еще не видел, чтобы проблема возникла снова, и я как можно быстрее набираю тестовую версию.

Кто-нибудь имел подобный опыт с этой ошибкой? Это исправило это?

1 Ответ

3 голосов
/ 30 апреля 2010

Исключения ExecutionEngineException вызываются при возникновении внутренней ошибки в CLR, поэтому Microsoft должна исправить ее.

Обертывание кода в блоке using или try-catch вряд ли сработает.

Проблема, упомянутая на веб-сайте webSupergoo, связана с .NET 3.5 SP1 и с тем, как атрибуты безопасности применялись к сборке. Я обнаружил, что эта ошибка возникает при отладке веб-страниц, и подозреваю, что проблема также связана с динамической компиляцией ASP.NET.

ABCpdf версии 7.010 и более поздних, чтобы обойти проблему. Извиняюсь за глупый вопрос, но вы пробовали последнюю версию?

Вы можете проверить, какая версия ABCpdf установлена ​​в данный момент, с помощью утилиты PDFSettings, которая находится в меню «Пуск» Windows> Программы> ABCpdf 7.0 .NET

Если обновление ABCpdf недоступно, вам может потребоваться удалить .NET 3.5 SP1.

...