【问题标题】:Abcpdf throwing System.ExecutionEngineExceptionAbcpdf 抛出 System.ExecutionEngineException
【发布时间】:2010-04-01 15:43:00
【问题描述】:

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

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

一直是这样的:

开始循环 ...

'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.ExecutionEngineException 并使 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

而且我还没有看到问题再次出现,并且一直在尽可能地尝试测试版本。

有没有人对这个错误有过类似的经历?这解决了吗?

【问题讨论】:

  • FWIW 我不知道如何修复这个错误,或者using 是否会继续阻止它,但我使用 iTextSharp PDF 库做几乎相同的事情并且没有任何问题(我正在添加 100 多个文档)

标签: asp.net vb.net abcpdf


【解决方案1】:

当 CLR 中存在内部错误时,会引发 ExecutionEngineExceptions,因此这是由 Microsoft 修复的。

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

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

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

您可以使用 PDFSettings 实用程序检查当前安装的 ABCpdf 版本,该实用程序位于 Windows 开始菜单 > 程序 > ABCpdf 7.0 .NET

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

【讨论】:

  • 感谢您的回复。我确实在 webSupergoo 网站上看到了该项目。不幸的是,我无法控制升级。奇怪的是,仍然没有看到问题再次出现,尽管我同意你的观点,即 using 块没有任何帮助。我猜它只是走运了?
猜你喜欢
  • 1970-01-01
  • 2021-09-30
  • 2011-01-02
  • 2011-07-15
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
相关资源
最近更新 更多