Как заставить CefSharp хорошо играть с CSScript

У меня есть приложение, которое использует CefSharp.OffScreen браузер, чтобы сделать немного скребущейся работы. Он работает в среде сценариев, используя CSScript для выполнения динамически загруженного класса, который вызывает CefSharp для выполнения работы.

CefSharp прекрасно работает в bin среда. Есть даже способ поместить все файлы CefSharp в их собственную папку, используяProbingPath, Но это работает, только если CefSharp работает в той же папке, что и ваш основной исполняемый файл, или в ProbingPath папка, которую вы создали. ProbingPath может быть установлен только как подпапка исполняемого пути.

CefSharp собирается из простой DLL, которую я написал, называется 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; ссылка, он будет искать в папке, из которой он был выполнен, найти DLL с именем MyCompany.Browser.dll и загрузить его для вас. CefSharpHeadlessBrowser это тип в этом MyCompany.Browser пространство имен, в DLL называется MyCompany.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

Эти сообщения приходят от CheckDependencies() метод вCefSharp.dll, который загружен 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 ответов

Другие вопросы по тегам