我有一个使用CefSharp.OffScreen
浏览器来做一些抓取工作的应用程序。它在脚本环境中运行,使用 CSScript 执行动态加载的类,该类调用 CefSharp 来完成工作。
CefSharp 在bin
环境中工作得非常好。 甚至还有一种方法可以将所有 CefSharp 文件放在他们自己的文件夹中,使用ProbingPath
. 但这仅在 CefSharp 与您的主要可执行文件在同一文件夹中或在ProbingPath
您设置的文件夹中运行时才有效。 ProbingPath 只能设置为可执行路径的子文件夹。
CefSharp 是从我编写的一个名为MyCompany.Browser
. 它有一个被称为Browse
接受 url 字符串并返回 html 字符串的方法。它通过启动CefSharp.OffScreen
浏览器并执行它来做到这一点,这一切在普通的 bin 环境中都可以正常工作。
在我的 CSScript 执行的动态加载脚本中,我有与此功能等效的代码(一个大大简化、高度人为的测试):
using MyCompany.Browser;
public string GetResult(string url)
{
using (var browser = new CefSharpHeadlessBrowser())
{
return browser.Browse(url);
}
}
CSScript 的工作方式是,如果您给它一个using MyCompany.Browser;
引用,它会在执行它的文件夹中查找,找到名为 MyCompany.Browser.dll 的 dll,然后为您加载它。 CefSharpHeadlessBrowser
是这个MyCompany.Browser
命名空间中的一个类型,在一个名为 的 DLLMyCompany.Browser.dll
中,在某个服务器上的主 bin 文件夹中,CSScript 很高兴地实例化了它。
但是,当我尝试执行该browser.Browse()
方法时,会发生这种情况:
Unable to locate required Cef/CefSharp dependencies:
Missing:CefSharp.BrowserSubprocess.exe
Missing:CefSharp.BrowserSubprocess.Core.dll
Missing:CefSharp.Core.dll
Missing:CefSharp.dll
Missing:icudtl.dat
Missing:libcef.dll
这些消息来自MyCompany.Browser.dll 已加载的CheckDependencies()
方法。CefSharp.dll
但是,就加载过程而言。MyCompany.Browser 已加载,因为它与 CSScript 位于同一文件夹中;CefSharp.dll 加载的时间足够长,可以运行其依赖项检查器并给我上面的错误消息,因为 MyCompany.Browser.dll 直接引用了它。
但是 CefSharp 的其余部分没有加载,因为动态加载的脚本没有在同一个 bin 文件夹中运行。相反,它运行在:
c:\Users\admin\AppData\Local\Temp\CSSCRIPT\dynamic\879ec55a-f761-4306-a79c-1af6cf08b312.tmp
我希望有人能够告诉我 CefSharp 有一个注册表项、一个app.config
元素或其他东西会通知 CefSharp “您可以在此处找到所有文件”。有没有类似的东西,如果没有,还有其他方法可以解决这个问题吗?