1

CefSharp.OffScreenブラウザを使用してスクレイピング作業を行うアプリケーションがあります。これは、CSScript を使用してスクリプト環境で実行され、CefSharp を呼び出して作業を行う動的にロードされるクラスを実行します。

CefSharp は、bin環境内で完全に正常に動作します。 を使用して、すべての CefSharp ファイルを独自のフォルダーに配置する方法もありますProbingPath。ただし、これは、CefSharp がプライマリ実行可能ファイルと同じフォルダー、またはProbingPath設定したフォルダーで実行されている場合にのみ機能します。 ProbingPath は、実行可能パスのサブフォルダーとしてのみ設定できます。

CefSharp は、私が作成した という単純な DLL からマーシャリングされていますMyCompany.BrowserBrowseURL文字列を受け取り、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から送信されています。ただし、それは読み込みプロセスに関する限りです。CSScript と同じフォルダーにあるため、MyCompany.Browser が読み込まれました。MyCompany.Browser.dll が CefSharp.dll を直接参照しているため、CefSharp.dll は依存関係チェッカーを実行するのに十分な時間ロードされ、上記のエラー メッセージが表示されます。

しかし、動的に読み込まれるスクリプトが同じ bin フォルダーで実行されていないため、CefSharp の残りの部分は読み込まれませんでした。代わりに、次の場所で実行されています。

c:\Users\admin\AppData\Local\Temp\CSSCRIPT\dynamic\879ec55a-f761-4306-a79c-1af6cf08b312.tmp

app.configCefSharp にはレジストリ エントリ、要素、または CefSharp に「ここですべてのファイルを見つけることができる場所です」と通知する何かがあることを誰かに教えてもらいたいです。そのようなものはありますか?そうでない場合、これを修正する他の方法はありますか?

4

0 に答える 0