CefSharp в ВСТО Аддин - PullRequest
       13

CefSharp в ВСТО Аддин

0 голосов
/ 20 сентября 2019

Я пытаюсь использовать элемент управления CefSharp WindowForm в VSTO Excel Addin.Версия CefSharp.WinForms 75.1.142, и я делаю надстройку для Excel 2013 (64-разрядная версия) до VS 2017.

Я получаю исключение FileNotFoundException: «Не удалось загрузить файл или сборку» CefSharp, версия= 75.1.142.0, Культура = нейтральная, PublicKeyToken = 40c4b6fc221f4138 'или одна из ее зависимостей.Система не может найти указанный файл.'на выполнение кода ниже.

    public void InitBrowser()
    {
        var cefSettings = new CefSettings();
        cefSettings.MultiThreadedMessageLoop = true;
        // I'm setting current directory to D:\\CEF\\cefsharp\\ExcelWinform\\ExcelWinformAddIn\\bin\\x64\\Debug\\ where all the CefSharp dlls and dependencies are present.
        cefSettings.BrowserSubprocessPath = "D:\\CEF\\cefsharp\\ExcelWinform\\ExcelWinformAddIn\\bin\\x64\\Debug\\CefSharp.BrowserSubprocess.exe";

        if (!Cef.Initialize(cefSettings, performDependencyCheck: true, browserProcessHandler: null))
        {
            throw new Exception("Unable to Initialize Cef");
        }

        browser = new ChromiumWebBrowser("http://www.google.com");
        {
            Dock = DockStyle.Fill;
        }
        BrowserSettings browserSettings = new BrowserSettings();
        //browserSettings.FileAccessFromFileUrls = CefState.Enabled;
        //browserSettings.UniversalAccessFromFileUrls = CefState.Enabled;
        browserSettings.BackgroundColor = 0xFFFF00;
        browserSettings.LocalStorage = CefState.Enabled;// enable Local access
        browser.BrowserSettings = browserSettings;
        this.Controls.Add(browser);
        browser.Dock = DockStyle.Fill;
    }

If instead of VSTO Excel addin, I just create a simple WindowFrom application then the abve code is working fine.

1 Ответ

0 голосов
/ 24 сентября 2019

Использование CefSharp напрямую в Office VSTO плагине / надстройке не поддерживается.

Если для приложения установлено несколько надстроек VSTO, каждый VSTO Add-in загружается в другой домен приложения.

В соответствии с https://docs.microsoft.com/en-us/visualstudio/vsto/architecture-of-vsto-add-ins?view=vs-2019 Office VSTO загрузится add-in с использованием AppDomain (я полагаю, даже если вы загружаете толькобудет использоваться отдельная надстройка домена приложения не по умолчанию).

CefSharp построен с использованием VC++, который не может быть загружен в нестандартном AppDomain.Вы видите, что ошибка связана с тем, что плагин не может загрузить libcef.dll, вы можете решить эту проблему, только столкнувшись с Cannot pass a GCHandle across AppDomains.

Вы можете запустить CefSharp вне процесса, длякоторый есть пример.Это немного устарело, основы должны быть актуальны.См. https://github.com/stever/AppHostCefSharp

Моя личная рекомендация - использовать CefGlue или ChromiumFx .Оба основаны на P/Invoke, поэтому используйте принципиально другой подход к взаимодействию с неуправляемым libcef.dll.


См. Также

...