首页 > 解决方案 > 如何在 ExcelDNA 插件中使用 Cefsharp 浏览器控件?

问题描述

我在自定义任务窗格中使用包含Cefsharp浏览器的ExcelDNA创建 excel 加载项。当我运行加载项时,我会收到关于以下内容的错误:

无法加载文件或程序集“CefSharp,Version=65.0.0.0,Culture=neutral,PublicKeyToken=40c4b6fc221f4138”或其依赖项之一。指定的模块无法找到。

我该如何解决?

创建包含以下内容的用户控件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; 
        }

笔记:

标签: c#vb.netwebbrowser-controlcefsharpexcel-dna

解决方案


这是 CefSharp 的一个已知问题......它与非默认 AppDomain 不兼容。您可以在问题“ Multiple AppDomains error”Cannot pass a GCHandle across AppDomains

Excel-DNA 为每个加载项创建一个自定义/非默认 AppDomain,而 CefSharp 不喜欢这样。不久前有人尝试修复 CefSharp,但不幸的是,拉取请求未被接受/合并,问题仍然存在。如果您足够勇敢,您可以下载该拉取请求并拥有您自己的 CefSharp 版本,并应用该修复程序。

将 CefSharp 按原样与 Excel-DNA 一起使用的解决方法是在默认 AppDomain 中的单独进程中运行它。如何在此处此处进行操作的示例。

您还可以在此讨论中阅读有关此内容的更多信息:“ CefSharp 和 ExcelDNA ”。

当然,鉴于这是 CefSharp 特有的问题,另一种选择是使用其他东西,例如CefGlueChromiumFx


推荐阅读