C# 无法加载 DLL “wkhtmltox.dll”: 找不到指定的模块。
🏷️ C#
线上的问题:
txt
System.Web.HttpUnhandledException (0x80004005): 引发类型为“System.Web.HttpUnhandledException”的异常。 ---> System.DllNotFoundException: 无法加载 DLL“wkhtmltox.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
Server stack trace:
在 TuesPechkin.WkhtmltoxBindings.wkhtmltopdf_init(Int32 useGraphics)
在 TuesPechkin.PdfToolset.Load(IDeployment deployment)
在 System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object args, Object server, Object& outArgs)
在 System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg)
Exception rethrown at [0]:
在 TuesPechkin.ThreadSafeConverter.Invoke[TResult](FuncShim`1 delegate)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
好像是有的时候能正确生成 PDF,有时候不行。
服务器中也有对应的 dll。
不知道为啥。
_converter
的实例化代码如下:
cs
_converter =
new ThreadSafeConverter(
new RemotingToolset<PdfToolset>(
new Win64EmbeddedDeployment(
new TempFolderDeployment())));
1
2
3
4
5
2
3
4
5
相关链接:
经测试,第一次调用时会编译生成该“wkhtmltox.dll
”,路径是根据当前 AppDomain
的根目录的 hashcode
再加上版本号等。
如:C:\Users\username\AppData\Local\Temp\62005745\8\0.12.2.1
源代码如下:
cs
public TempFolderDeployment()
{
// Scope it to the application
Path = System.IO.Path.Combine(
System.IO.Path.GetTempPath(),
AppDomain.CurrentDomain.BaseDirectory.GetHashCode().ToString());
// Scope it by bitness, too
Path = System.IO.Path.Combine(
Path,
IntPtr.Size.ToString());
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
在该 dll 文件生成之后且未被程序加载之前删除该文件,就会出现该异常。