如何在 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;
}
注意:
- 所有 dependencies/references 连接和文件(
unmanaged
资源)添加到 bin/Debug
。
- 加载项正常工作(如果 ChromiumWebBrowser 未使用)。
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。
我正在使用 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;
}
注意:
- 所有 dependencies/references 连接和文件(
unmanaged
资源)添加到bin/Debug
。 - 加载项正常工作(如果 ChromiumWebBrowser 未使用)。
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。