ExcelDNA中的Cefsharp

时间:2018-08-06 15:15:41

标签: c# vb.net webbrowser-control cefsharp excel-dna

我使用ExcelDNA创建了一个Excel加载项,其中包含Cefsharp中的Custom task pane浏览器。运行加载项时,会出现以下错误:

  

无法加载文件或程序集“ CefSharp,版本= 65.0.0.0,   文化=中性,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; 
        }

注意:

  • 所有已连接的依赖项/引用和将文件(unmanaged资源)添加到bin/Debug中。
  • 加载项正常工作(如果ChromiumWebBrowser未使用)。

1 个答案:

答案 0 :(得分:1)

This is a known issue with CefSharp ...它与非默认AppDomains不兼容。您可以在问题“ Multiple AppDomains error "Cannot pass a GCHandle across AppDomains”中看到更多详细信息

Excel-DNA为每个加载项创建一个自定义/非默认AppDomain,而CefSharp不喜欢这样。 Someone tried to fix CefSharp a while ago,但不幸的是,拉取请求was not accepted/merged仍然存在。如果您足够勇敢,则可以下载该pull-request并拥有自己的CefSharp版本,并应用该修复程序。

将CefSharp与Excel-DNA一起使用的解决方法是在默认的AppDomain中以单独的过程运行它。 herehere的操作示例。

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

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