我有一个使用CefSharp.OffScreen
浏览器进行一些抓取工作的应用程序。它在脚本环境中运行,使用CSScript执行动态加载的类,该类调用CefSharp来完成工作。
CefSharp在bin
环境中完美运行。 There's even a way to place all of the CefSharp files in their own folder, using ProbingPath
。但这仅在CefSharp与主要可执行文件在同一文件夹中运行时,或在您设置的ProbingPath
文件夹中有效。 ProbingPath只能设置为可执行路径的子文件夹。
CefSharp由名为MyCompany.Browser
的{{3}}编组。它有一个名为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
命名空间中的一个类型,位于名为MyCompany.Browser.dll
的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
这些邮件来自a simple DLL I wrote,MyCompany.Browser.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的内容"这里是您可以找到所有文件的地方"是否有类似的东西,如果没有,还有其他方法来解决这个问题吗?