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>
根据错误信息,
要解决此问题,您可以尝试将平台目标设置为x86,如下所示,然后尝试发布。
欲了解更多信息,请参阅以下链接:
。 无法加载 DLL 'libwkhtmltox' | GitHub
。 BadImageFormatException |MSDN
我通过更改 dll 文件的属性解决了这个问题。你可能想尝试一下。
1。检查构建操作 对于您需要包含在部署中的每个 DLL:
在 Visual Studio 中,右键单击解决方案资源管理器中的 DLL。
选择属性。
在属性窗口中,找到“构建操作”设置。 确保构建操作设置为“内容”。
2。复制到输出目录 仍在 DLL 的属性窗口中:
找到“复制到输出目录”设置。
将其设置为“如果较新则复制”或“始终复制”。
这可确保在构建过程中将 DLL 复制到输出文件夹。