C# DinkToPdf网络核心无法加载DLL文件

C# DinkToPdf网络核心无法加载DLL文件,c#,.net-core,wkhtmltopdf,html-to-pdf,dinktopdf,C#,.net Core,Wkhtmltopdf,Html To Pdf,Dinktopdf,我正在尝试使用库从html sql server数据库生成PDF 在我添加的启动文件中 var context = new CustomAssemblyLoadContext(); context.LoadUnmanagedLibrary(Path.Combine(Directory.GetCurrentDirectory(), "libwkhtmltox.dll")); 该行显示启动web应用程序时出错 DllNotFoundException:无法加载DLL“C:\Program File

我正在尝试使用库从html sql server数据库生成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)


请尽可能提供帮助

我找到了一些解决办法。它们并不完美,但值得一试,它们确实提供了帮助,我能够从SQLServer生成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");

<> P>只要有人有相同的问题,我就可以通过安装微软Visual C++ 2015重新分发它来解决它。

< p>在图书馆的Git RePO中提到,你应该下载二进制文件并将它们包含在源代码中:

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

让我心碎的是,我要去那个url,右键点击每个文件,然后选择
另存链接为
(chrome)。这会导致下载一个损坏的文件:

不要那样做 您必须在github中打开每个文件,然后使用
Download
按钮。 健康的文件比你走错方向时得到的文件大得多


可笑的是,这个问题可能是由以下原因引起的…

在Asp.Net核心应用程序中,我这样使用它在运行时获取当前目录

#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

如果您使用nuget导入dinktopdf可以吗?除非直接加载为unange?您好,我已经导入了。我已经安装好了。在其使用说明中,我必须从运行导入dll文件。但是这个方法Directory.GetCurrentDirectory()似乎不能在Asp.Net Core 3.0Asp.Net Core Directory上工作。GetCurrentDirectory()我认为是罪魁祸首。它将返回C:\Program Files\IIS Express\作为项目的默认文件夹,并发布了一条声明“我遇到了同样的问题,本教程帮助了我:”它在本地工作,但是当我发布到azure时发生了一个错误。mac呢?我建议使用System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform()代替,检查平台是Windows还是Linux,并设置适当的路径。这样调试就不会绑定到Linux。在UAT环境中加载遗留的32位dll时,我遇到了类似的问题。C++ 2010可重分配用于这个特定的DLL。