让CefSharp与CSScript一起玩得很好

时间:2016-05-06 01:13:50

标签: c# dll chromium-embedded cefsharp cs-script

我有一个使用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,并为你加载它。 CefSharpHeadlessBrowserMyCompany.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的内容"这里是您可以找到所有文件的地方"是否有类似的东西,如果没有,还有其他方法来解决这个问题吗?

0 个答案:

没有答案