如何修复 Azure 应用服务无法加载 DLL“libwkhtmltox”或其依赖项之一

问题描述 投票:0回答:2

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

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

BadImageFormatException:尝试加载带有 格式不正确。 (0x8007000B) System.Runtime.InteropServices.NativeLibrary.LoadFromPath(字符串 库名称,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# azure asp.net-core dll azure-web-app-service
2个回答
0
投票

根据错误信息,

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

欲了解更多信息,请参阅以下链接:

无法加载 DLL 'libwkhtmltox' | GitHub

BadImageFormatException |MSDN

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

DinkToPdf Net Core 无法加载 DLL 文件 |所以主题


0
投票

我通过更改 dll 文件的属性解决了这个问题。你可能想尝试一下。

1。检查构建操作 对于您需要包含在部署中的每个 DLL:

在 Visual Studio 中,右键单击解决方案资源管理器中的 DLL。

选择属性。

在属性窗口中,找到“构建操作”设置。 确保构建操作设置为“内容”。

2。复制到输出目录 仍在 DLL 的属性窗口中:

找到“复制到输出目录”设置。

将其设置为“如果较新则复制”或“始终复制”。

这可确保在构建过程中将 DLL 复制到输出文件夹。

© www.soinside.com 2019 - 2024. All rights reserved.