Abcpdf抛出System.ExecutionEngineException

时间:2010-04-01 15:43:00

标签: asp.net vb.net abcpdf

我有几个pdf文件的二进制文件存储在Byte数组的集合中。

我的目标是使用abcpdf将它们连接成一个.pdf文件,然后将新创建的文件流式传输到ASP.Net网站页面上的Response对象。

一直这样做:

BEGIN LOOP ...

'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有关。它似乎几乎是完全随机的。

这是[cn}中描述的(不太好)abcpdf中的已知错误Item 6.24。我遇到了a helpful SO post,它建议对abcpdf Doc对象使用Using块。

所以现在我这样做了:

    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 个答案:

答案 0 :(得分:3)

当CLR中存在内部错误时,抛出ExecutionEngineExceptions,因此这是Microsoft要修复的错误。

因此,在using或try-catch块中包装代码不太可行。

webSupergoo网站上提到的与.NET 3.5 SP1相关的问题,以及如何将安全属性应用于程序集。我发现在调试网页时发生了这个错误,并怀疑问题也与ASP.NET动态编译有关。

ABCpdf 7.010及更高版本解决了这个问题。对于一个愚蠢的问题道歉,但你是否尝试过最新版本?

您可以使用通过Windows“开始”菜单>找到的PDFSettings实用程序来检查当前安装的ABCpdf版本。节目> ABCpdf 7.0 .NET

如果无法更新ABCpdf,则可能需要考虑卸载.NET 3.5 SP1。