7

我正在尝试使用DinkToPdf库从 HTML SQL 服务器数据库生成 PDF。

在我添加的启动文件中:

var context = new CustomAssemblyLoadContext();
context.LoadUnmanagedLibrary(Path.Combine(Directory.GetCurrentDirectory(), "libwkhtmltox.dll"));

该行在启动网络应用程序时给了我这个错误:

DllNotFoundException:无法加载 DLL 'C:\Program Files\IIS Express\libwkhtmltox.dll' 或其依赖项之一:找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)

System.Runtime.Loader.AssemblyLoadContext.InternalLoadUnmanagedDllFromPath(字符串 unmanagedDllPath)

DllNotFoundException:无法加载 DLL 'C:\Program Files\IIS Express\libwkhtmltox.dll' 或其依赖项之一:找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)

4

5 回答 5

11

以防万一其他人遇到同样的问题,我可以通过安装 Microsoft Visual C++ 2015 Redistributable 来解决它。

于 2019-06-20T22:41:41.257 回答
9

在库的 git repo 中提到你应该下载二进制文件并将它们包含在你的源代码中:

将本机库复制到项目的根文件夹。当使用 P/Invoke 调用本机方法时,.NET Core 从那里加载本机库。你可以在这里找到最新版本的本地库。为您的操作系统和平台(64 位或 32 位)选择合适的库。

破坏的是我要去那个网址并右键单击每个文件并选择save link as(chrome)。这会导致下载损坏的文件: 在此处输入图像描述

不要这样做,您必须在 github 中打开每个文件,然后使用该Download按钮。如果你走错了路,健康的文件比你得到的要大得多!

在此处输入图像描述

荒谬,但问题可能是由此引起的......

于 2020-02-29T11:11:51.483 回答
1

我找到了一些解决方法。它们并不完美,但值得一试,它们确实提供了帮助,我能够从 SQl Server 生成 PDF。我将 .dll 文件放在以下文件夹中并且它工作。

C:\Program Files\IIS Express

和加载的 .dll 文件

Path.Combine(Directory.GetCurrentDirectory(), "libwkhtmltox.dll");

我走的另一条路

context.LoadUnmanagedLibrary(Path.GetFullPath(@"C:\Users\User\source\repos\WebSolution\WebApp\libwkhtmltox.dll"));

他们俩都工作了。但是,我敦促 Net Core 开发人员很好地处理 GetCurrentDir。或从项目或解决方案文件夹加载的方法

Path.Combine(Directory.GetCurrentDirectory(), "libwkhtmltox.dll");
于 2019-03-30T14:31:33.493 回答
1

在 Asp.Net Core 应用程序上,我像这样使用它来获取运行时的当前目录

#if DEBUG
            //windows
            string filePath = $@"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}\libwkhtmltox.dll";
#else
            //linux
            string filePath = @$"{(($@"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}/libwkhtmltox.so").Replace(@"\", @"/"))}";
#endif
            CustomAssemblyLoadContext context = new CustomAssemblyLoadContext();
            context.LoadUnmanagedLibrary(filePath);
            serviceCollection.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
#endregion
于 2020-04-10T07:41:32.367 回答
0

如果您在 Linux 上使用 asp.net core,那么您需要使用以下命令安装所需的包

apt-get update \
&& apt-get install -y --no-install-recommends \
    zlib1g \
    fontconfig \
    libfreetype6 \
    libx11-6 \
    libxext6 \
    libxrender1 \
&& curl -o /usr/lib/libwkhtmltox.so \
    --location \
    https://github.com/rdvojmoc/DinkToPdf/raw/v1.0.8/v0.12.4/64%20bit/libwkhtmltox.so
于 2022-01-17T21:18:00.077 回答