DinkToPdf Net Core not able to load DLL files
Solution 1
I found some work-arounds. They are not perfect but worth a try, and they did do help and I was able to generate PDFs from SQl Server. I put the .dll files in the following folder and it worked.
C:\Program Files\IIS Express
and the loaded the .dll files with
Path.Combine(Directory.GetCurrentDirectory(), "libwkhtmltox.dll");
The other way I went for the whole Path
context.LoadUnmanagedLibrary(Path.GetFullPath(@"C:\Users\User\source\repos\WebSolution\WebApp\libwkhtmltox.dll"));
Both of them worked. However, I urge Net Core developers to work on the GetCurrentDir very well. Or a Method to load from the Project or Solution Folder
Path.Combine(Directory.GetCurrentDirectory(), "libwkhtmltox.dll");
Solution 2
Just in case anyone else is having the same issue I was able to solve it by installing Microsoft Visual C++ 2015 Redistributable.
Solution 3
It is mentioned in library's git repo that you should download binaries and include them in your source code:
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).
What was breaking things was that I was going to that url and right click on each file and select save link as
(chrome). This leads to a broken file being downloaded:
DON'T DO THAT
you have to open each file within github and then use that Download
button.
The healthy file is much bigger than what you would get if you go the wrong way!
ridiculous but the problem may be caused by this ...
Solution 4
On Asp.Net Core application I use it like this to get the current directory on runtime
#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
![Joseph Wambura](https://lh4.googleusercontent.com/-pFPntzQ62p0/AAAAAAAAAAI/AAAAAAAAACQ/-QKhIjmOBeU/photo.jpg?sz=256)
Joseph Wambura
Software Engineering .Net & .Net Core Developer Database Scripts Designer Web Designer / Web Developer Part-Time Android Developer Note: This user is currently viewing my profile. My experience in programming: C# 70% Java / Java 8 70% Kotlin 80% Nodejs 40% Firebase functions - JavaScript 50% Hire me, [email protected]
Updated on July 25, 2022Comments
-
Joseph Wambura almost 2 years
I am trying to generate PDFs from HTML SQL server database using DinkToPdf library.
In the startup file I have added:
var context = new CustomAssemblyLoadContext(); context.LoadUnmanagedLibrary(Path.Combine(Directory.GetCurrentDirectory(), "libwkhtmltox.dll"));
The line gives me this error on launching the web app:
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)
-
Swaroop about 5 yearsIt does work locally,however when I publish to azure an error occured.
-
Idris Stack almost 5 yearsWhat of mac . ?
-
M.Boukhlouf almost 4 yearsI would recommend using System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform() instead, check the platform if it's Windows or Linux and set the appropriate path. This way Debug won't be tied to Linux.
-
nf313743 almost 4 yearsI had a similar issue when loading a legacy 32bit dll in a UAT environment. The C++ 2010 Redistributable worked for this particular dll.
-
blogprogramisty.net almost 3 yearsThx Very Much...local was ok but production - other serwer not working - YOU SAVE MY DAY
-
Zeshan over 2 yearsthis command need to be used by root permissions, we need to call 'sudo su' command before using this
-
Zeshan over 2 yearsfollowing commands helped when DinkToPdf was not showing images properly
sudo apt-get install libgdiplus
sudo apt-get install xvfb libfontconfig wkhtmltopdf
sudo apt-get install libc6-dev
sudo apt-get install openssl
sudo apt-get install libssl1.0-dev
-
Mr Alexander Ws about 2 yearsI am using this solution, and it's now worked for me. So I just manually download the dll file, even I have libwkhtmltox.dylib and libwkhtmltox.so files.