DinkToPdf Net Core无法加载DLL文件

时间:2019-03-30 10:33:36

标签: c# .net-core wkhtmltopdf html-to-pdf dinktopdf

我尝试使用DinkToPdf库从html sql服务器数据库生成PDF。

在启动文件中我添加了

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

该行使我在启动Web应用程序时出错

  

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 个答案:

答案 0 :(得分:2)

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

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

令人头疼的是,我要转到该URL,然后右键单击每个文件,然后选择save link as(chrome)。这将导致下载损坏的文件: enter image description here

不要那样做 您必须在github中打开每个文件,然后使用该Download按钮。 健康档案比错误方式得到的档案大得多!

enter image description here

荒谬,但问题可能是由于...

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

something

答案 3 :(得分:0)

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

  

C:\ Program Files \ IIS Express

并使用.p加载.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");