DinkToPdf Net Core 无法加载 DLL 文件
DinkToPdf Net Core not able to load DLL files
我正在尝试使用 DinkToPdf 库从 HTML SQL 服务器数据库生成 PDF。
在我添加的启动文件中:
var context = new CustomAssemblyLoadContext();
context.LoadUnmanagedLibrary(Path.Combine(Directory.GetCurrentDirectory(), "libwkhtmltox.dll"));
该行在启动网络应用程序时给我这个错误:
DllNotFoundException: Unable to load DLL 'C:\Program Files\IIS Express\libwkhtmltox.dll' or one of its dependencies: The specified module could not be found. (Exception from HRESULT: 0x8007007E)
System.Runtime.Loader.AssemblyLoadContext.InternalLoadUnmanagedDllFromPath(string unmanagedDllPath)
DllNotFoundException: Unable to load DLL 'C:\Program Files\IIS Express\libwkhtmltox.dll' or one of its dependencies: The specified module could not be found. (Exception from HRESULT: 0x8007007E)
我找到了一些解决方法。它们并不完美,但值得一试,它们确实提供了帮助,我能够从 SQl 服务器生成 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");
为了防止其他人遇到同样的问题,我可以通过安装 Microsoft Visual C++ 2015 Redistributable 来解决它。
库的 git 存储库中提到您应该下载二进制文件并将它们包含在您的源代码中:
Copy native library to root folder of your project. From there .NET Core loads native library when native method is called with P/Invoke. You can find latest version of native library here. Select appropriate library for your OS and platform (64 or 32 bit).
破坏性的是我要去 url 并右键单击每个文件和 select save link as
(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
如果您在 Linux 上使用 asp.net 核心,那么您需要使用以下命令安装所需的软件包
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
我正在尝试使用 DinkToPdf 库从 HTML SQL 服务器数据库生成 PDF。
在我添加的启动文件中:
var context = new CustomAssemblyLoadContext();
context.LoadUnmanagedLibrary(Path.Combine(Directory.GetCurrentDirectory(), "libwkhtmltox.dll"));
该行在启动网络应用程序时给我这个错误:
DllNotFoundException: Unable to load DLL 'C:\Program Files\IIS Express\libwkhtmltox.dll' or one of its dependencies: The specified module could not be found. (Exception from HRESULT: 0x8007007E)
System.Runtime.Loader.AssemblyLoadContext.InternalLoadUnmanagedDllFromPath(string unmanagedDllPath)
DllNotFoundException: Unable to load DLL 'C:\Program Files\IIS Express\libwkhtmltox.dll' or one of its dependencies: The specified module could not be found. (Exception from HRESULT: 0x8007007E)
我找到了一些解决方法。它们并不完美,但值得一试,它们确实提供了帮助,我能够从 SQl 服务器生成 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");
为了防止其他人遇到同样的问题,我可以通过安装 Microsoft Visual C++ 2015 Redistributable 来解决它。
库的 git 存储库中提到您应该下载二进制文件并将它们包含在您的源代码中:
Copy native library to root folder of your project. From there .NET Core loads native library when native method is called with P/Invoke. You can find latest version of native library here. Select appropriate library for your OS and platform (64 or 32 bit).
破坏性的是我要去 url 并右键单击每个文件和 select save link as
(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
如果您在 Linux 上使用 asp.net 核心,那么您需要使用以下命令安装所需的软件包
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