【发布时间】:2020-07-24 13:22:03
【问题描述】:
我开发了一个 dotnet 核心应用程序。在我的一个过程中,我需要生成一个 PDF 文件。 我尝试了一些包,我选择了 DinkToPdf 包。
这是我在启动文件中的配置:
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
然后,当我想生成 pdf 时,我会加载外部二进制文件(我将二进制文件 libwkhtmltox.dll 和 libwkhtmltox.so 存储在 /lib/x64 中,并将 Build Action 设置为 Content 并始终复制以将它们放入 bin 文件夹中) ):
string libPath = Path.Combine(Directory.GetCurrentDirectory(), $"lib/{architectureFolder}/libwkhtmltox" + fileEx);
context.LoadUnmanagedLibrary(libPath);
LoadUnmanagedLibrary 函数:
public class CustomAssemblyLoadContext : AssemblyLoadContext
{
public IntPtr LoadUnmanagedLibrary(string absolutePath)
{
return LoadUnmanagedDll(absolutePath);
}
protected override IntPtr LoadUnmanagedDll(String unmanagedDllName)
{
return LoadUnmanagedDllFromPath(unmanagedDllName);
}
protected override Assembly Load(AssemblyName assemblyName)
{
throw new NotImplementedException();
}
}
此过程在我的本地 Windows 中运行良好,但是当我在 Linux 的 Azure 应用服务(B1 计划,但我也尝试过使用 S1)中部署我的应用时,我得到以下异常:
System.DllNotFoundException: Unable to load shared library 'libwkhtmltox' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibwkhtmltox: cannot open shared object file: No such file or directory
我检查了二进制文件,它们被很好地复制到了 bin 文件夹中。 我知道有 a time 在 Azure App 服务中加载此类库被阻止,但现在看起来这是授权的。
你们对这个问题有什么想法吗?
非常感谢您的帮助! :)
多里安
【问题讨论】:
标签: asp.net-core pdf-generation azure-web-app-service wkhtmltopdf