Как заставить 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, что "Здесь вы можете найти все ваши файлы". Есть ли что-то подобное, и если нет, есть ли другой способ исправить это?