尝试从Azure Function V2调用第三方dll时遇到异常

时间:2018-10-23 08:15:36

标签: c# .net azure azure-functions wkhtmltopdf

我严格遵循以下示例:https://odetocode.com/blogs/scott/archive/2018/02/14/pdf-generation-in-azure-functions-v2.aspx

我从DinkToPdf repository下载了三个文件

问题是当我添加32位或64位DLL时,出现以下错误:

  

发生一个或多个错误。 (试图加载格式错误的程序。(HRESULT的异常:0x8007000B)

尤其是此代码:

private static byte[] BuildPdf(string html)
    {
        byte[] arr = null;

        try
        {
            arr = pdfConverter.Convert(new HtmlToPdfDocument() { Objects = { new ObjectSettings { HtmlContent = html } } });
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine(ex);
        }

        return arr;
    }

“我的Azure Function V2 .net Core”项目设置为“任何CPU”,没有其他选项。我在Stack Overflow上看到了有关此错误的其他文章,我觉得这是不同的,因为其他人正在谈论两个可以控制的项目,并且体系结构有所不同,但是在这里我只指出了一些二进制文件,无论是否它们是32或64,错误仍然存​​在。我还看到有些人更改了IIS的设置,但我没有。有任何想法吗?谢谢!

enter image description here

1 个答案:

答案 0 :(得分:1)

  

发生一个或多个错误。 (试图加载格式错误的程序。(HRESULT的异常:0x8007000B)

此错误是由使用64位dll引起的。默认情况下,VS与32位功能CLI配合使用,因此会出现此错误。有点问题,我们可以将x64 CLI与several steps一起使用。

问题是一个棘手的错误Qt: Could not initialize OLE (error 80070005)

当我们的html内容包含一些javascript标记或引用时,函数将挂起。请参见test done by Travis。删除js后,函数会成功返回PDF,但错误消息仍然存在。(我认为这没关系,因为我们可以按预期获得完整的PDF。)

如果不接受此限制,请安装软件包OpenHtmlToPdf,如下所示更改代码。您也可以尝试other packages

private static byte[] BuildPdf(string html)
{
    return Pdf.From(html).Content();
}

请注意,此方法在“消费功能计划”或“免费App服务计划”中无效。