代码之家  ›  专栏  ›  技术社区  ›  Tom Tresansky

abcpdf抛出system.executionengineexception

  •  1
  • Tom Tresansky  · 技术社区  · 14 年前

    我有存储在字节数组集合中的几个PDF文件的二进制文件。

    我的目标是使用abcpdf将它们连接到一个.pdf文件中,然后将新创建的文件流式传输到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)
    

    结束循环

    95%的时候都能正常工作。但是,偶尔创建一个新的Doc对象会抛出System.ExecutionEngineeException并使CLR崩溃。它似乎与大量的PDF(有时仅2个)或大型PDF没有关系。它看起来几乎完全是随机的。

    这是在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 回复  |  直到 14 年前
        1
  •  3
  •   AffineMesh    14 年前

    当clr中存在内部错误时,会引发executionengineexceptions,因此这是供Microsoft修复的一个错误。

    因此,在using或try catch块中包装代码不太可能工作。

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

    abcpdf版本7.010和更高版本解决了这个问题。为一个愚蠢的问题道歉,但你试过最新版本了吗?

    您可以使用pdfsettings实用程序检查当前安装的abcpdf版本,该实用程序位于Windows开始菜单>程序>abcpdf 7.0.net中。

    如果更新abcpdf不是一个选项,那么您可能需要考虑卸载.NET 3.5 SP1。