首页 > 解决方案 > 如何修复 Azure 应用服务无法加载 DLL 'libwkhtmltox' 或其依赖项之一

问题描述

Azure 应用服务无法加载 libwkhtmltox。我在本地机器上工作正常,但是在部署到 azure 时,出现无法加载或其依赖项之一的错误。我在网上搜索并对我的代码进行了一些更改,我再次收到此错误。

当我再次推送到 azure 时出现以下错误

BadImageFormatException:试图加载格式不正确的程序。(0x8007000B) System.Runtime.InteropServices.NativeLibrary.LoadFromPath(字符串 libraryName, bool throwOnError)

下面是更新的代码

            var wkHtmlToPdfFileDllName = "libwkhtmltox";
             if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
            {
                wkHtmlToPdfFileDllName += ".so";
            }
            else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
            {
                wkHtmlToPdfFileDllName += ".dylib";
            }
            else
            {
                wkHtmlToPdfFileDllName += ".dll";
            }

            var wkHtmlToPdfPath = Path.Combine(Directory.GetCurrentDirectory(), "wkhtmltox", wkHtmlToPdfFileDllName);
            CustomAssemblyLoadContext context = new CustomAssemblyLoadContext();
            context.LoadUnmanagedLibrary(wkHtmlToPdfPath);
            services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));

我还将它添加到 .csproj

  <ItemGroup>
  <None Remove="wkhtmltox\libwkhtmltox.dll" />
</ItemGroup>

<ItemGroup>
  <EmbeddedResource Include="wkhtmltox\libwkhtmltox.dll">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </EmbeddedResource>
</ItemGroup>

标签: c#azureasp.net-coredllazure-web-app-service

解决方案


根据错误信息,

要解决此问题,您可以尝试将平台目标设置为x86 ,如下所示,然后尝试发布。

在此处输入图像描述

有关更多信息,请参阅以下链接:

. 无法加载 DLL 'libwkhtmltox' | GitHub

. BadImageFormatException |MSDN

. 尝试加载格式不正确的程序”,即使平台相同 | SO THREAD

. DinkToPdf Net Core 无法加载 DLL 文件 | 所以线程


推荐阅读