我尝试使用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)
在任何可能的地方提供帮助
答案 0 :(得分:2)
在库的git repo中提到,您应该下载二进制文件并将其包含在源代码中:
将本机库复制到项目的根文件夹。当使用P / Invoke调用本机方法时,.NET Core从那里加载本机库。您可以找到本机库here的最新版本。选择适合您的操作系统和平台(64位或32位)的库。
令人头疼的是,我要转到该URL,然后右键单击每个文件,然后选择save link as
(chrome)。这将导致下载损坏的文件:
不要那样做
您必须在github中打开每个文件,然后使用该Download
按钮。
健康档案比错误方式得到的档案大得多!
荒谬,但问题可能是由于...
答案 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");