我有一个使用 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从a simple DLL I wrote编组,称为 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 命名空间中的一个类型,位于名为 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 CheckDependencies() method in CefSharp.dll,MyCompany.Browser.dll已加载 . 但是,'s as far as the loading process gets. MyCompany.Browser has loaded because it'与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 "Here is where you can find all of your files."有类似的东西,如果没有,还有其他方法可以解决这个问题吗?