1

我有一个使用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 “您可以在此处找到所有文件”。有没有类似的东西,如果没有,还有其他方法可以解决这个问题吗?

4

0 回答 0