如何在 ExcelDNA 加载项中使用 Cefsharp 浏览器控件?

How to use Cefsharp browser control in ExcelDNA add-in?

我正在使用 ExcelDNA that contains Cefsharp browser in Custom task pane 创建 excel 加载项。当我 运行 加载项时,我会收到有关以下内容的错误:

Could not load file or assembly "CefSharp, Version=65.0.0.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138" or one of its dependencies. The specified module could not be found.

我该如何解决?

正在创建包含 ChromiumWebBrowser:

的用户控件
        [ComVisible(true)]
        public class MyBrowser : UserControl
        {
            ChromiumWebBrowser browser = new ChromiumWebBrowser("www.google.com");
            browser.Dock = DockStyle.Fill;
            this.Controls.Add(browser);
        }

创建自定义任务窗格的代码:

        private static void CreateCTP()
        {
            ctp = CustomTaskPaneFactory.CreateCustomTaskPane(typeof(MyBrowser), 
                            "My Custom Task Pane");
            //Setting ctp params...
            ctp.Visible = true; 
        }

注意:

This is a known issue with CefSharp... It is not compatible with non-default AppDomains. You can see more details in the issue "Multiple AppDomains error "Cannot pass a GCHandle across AppDomains"

Excel-DNA 为每个加载项创建一个 custom/non-default AppDomain,而 CefSharp 不喜欢这样。 Someone tried to fix CefSharp a while ago, but unfortunately the pull-request was not accepted/merged 问题依然存在。如果您足够勇敢,您可以下载该拉取请求并拥有您自己的 CefSharp 版本,并应用该修复程序。

将 CefSharp 按原样与 Excel-DNA 一起使用的解决方法是 运行 在单独的进程中,在默认的 AppDomain 中。操作示例 here and here.

您还可以在此讨论中阅读更多相关信息:“CefSharp and ExcelDNA”。

当然,鉴于这是 CefSharp 特有的问题,另一种替代方法是使用其他方法,例如 CefGlue or ChromiumFx