c# - 如何在 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;
}
笔记:
- 连接的所有依赖项/引用和文件(
unmanaged
资源)添加到bin/Debug
. - 加载项正常工作(如果 ChromiumWebBrowser 未使用)。
解决方案
这是 CefSharp 的一个已知问题......它与非默认 AppDomain 不兼容。您可以在问题“ Multiple AppDomains error”Cannot pass a GCHandle across AppDomains中
Excel-DNA 为每个加载项创建一个自定义/非默认 AppDomain,而 CefSharp 不喜欢这样。不久前有人尝试修复 CefSharp,但不幸的是,拉取请求未被接受/合并,问题仍然存在。如果您足够勇敢,您可以下载该拉取请求并拥有您自己的 CefSharp 版本,并应用该修复程序。
将 CefSharp 按原样与 Excel-DNA 一起使用的解决方法是在默认 AppDomain 中的单独进程中运行它。如何在此处和此处进行操作的示例。
您还可以在此讨论中阅读有关此内容的更多信息:“ CefSharp 和 ExcelDNA ”。
当然,鉴于这是 CefSharp 特有的问题,另一种选择是使用其他东西,例如CefGlue或ChromiumFx。
推荐阅读
- python - matplotlib,重新安装后每个文本都是粗体
- javascript - Vue JS 自定义插件道具未更新
- javascript - Angular - 如何从函数中获取参数,并将其用作变量名来做某事?
- c# - “无法从 SOAP 信封中剥离有效负载”使用 ParkSquare.SoapClient
- windows - 转储 W32pServiceTable
- kubernetes - Kubernetes角色隐藏master
- python - numpy 中的大内存分配
- css - Bootstrap 4 - 在 Firefox 上达到最后一个断点后,元素最小宽度更改为 >1700 万像素
- webstorm - 为 prettier.js JetBrains 设置配置
- c# - 为什么不显示动态图像?