有什么理由更喜欢 CefSharp 而不是 CefGlue(反之亦然)?

Any reason to prefer CefSharp over CefGlue (or vice-versa)?

提问人:Drew Shafer 提问时间:9/1/2012 更新时间:10/28/2020 访问量:20523

问:

在为 .Net 提供体面的 Chromium 嵌入式框架 (CEF) 实现方面,两个主要选项似乎是 CefSharp 和 CefGlue。它们在方法上有所不同(CefGlue 使用 P/Invoke 调用 CEF 非托管代码,CefSharp 使用 CEF 库周围的混合模式 C++/CLI 包装器)。

混合模式程序集是否比 P/Invoke 调用更好?在所有其他条件相同的情况下,似乎 CefGlue(P/Invoke 库)为 CEF 项目提供了一个“更薄”的包装器,这意味着它可能会更快地响应上游库中的更新。

有没有在这两个图书馆都有经验的人可以分享差异化因素是什么?

.NET Webkit C++-cli pinvoke chromium

评论

14赞 anthony 9/7/2012
CefSharp 维护者在这里。不知道为什么它被关闭了。例如,CefGlue 的优点是能够在 Mono 中运行。CefSharp 提供 WinForms 和 WPF 控件。两者都可以相当快地响应上游库中的更新。我与CefGlue的维护者保持联系,他是个好人。只要使用任何感觉合适的东西。为 CefSharp 和 CefGlue 项目设置了谷歌群组,请随时提出您可能遇到的任何其他问题。
1赞 Drew Shafer 9/7/2012
我也不确定 - 可能是因为 P/Invoke 与 C++/CLI 包装器的(通用)优点已经在其他地方讨论过。就其价值而言,我已经选择了 CefSharp(正如您可能已经从我最近的拉取请求中猜到的那样)。不过,我将继续关注这两个项目......
8赞 KJW 2/19/2013
为什么会关闭这个?
0赞 Uwe Keim 5/30/2013
@anthony 在使用 CefSharp 密集工作了 2 天后,我确实觉得大多数“更深层次的东西”不是(故意的?)在 CefSharp 中实现的,而只是在 CefGlue 中实现的。例如,访问 DOM、某些事件等。可能必须切换到 CefGlue 或为 CefSharp 做出贡献(如果我最终摆脱了 Github 的东西)。

答:

21赞 Artem 3/20/2014 #1

从某种意义上说,它们大致相同,无论你选择哪一个,你都应该能够在2014年逃脱。我们前段时间有这个问题,这里我们想到了:

Cef夏普

优点:

  1. WinForms是一个非常古老和成熟的项目。如果您要使用 WinForms,这可能是要走的路;
  2. 它有一个 NuGet 捆绑包,因此易于使用和更新;
  3. 支持较新版本的 WPF (.NET 4+);

缺点:

  1. 正如 @Uwe Keim 所提到的,他们最近才终于开始支持 WPF,所以它不像 Xillium.CefGlue 那样成熟;
  2. 社区不太能接受你的需求;
  3. 不支持 Mono。

Cef胶水

优点:

  1. 它是 .NET 2.0 友好的。您的代码将能够在其上运行。(这对我们来说至关重要)
  2. 一个反应灵敏的社区,可以帮助您完成/修复需要完成/修复的工作;
  3. 对 WPF 的更成熟的支持;
  4. 单声道支持。

缺点:

  1. 据我所知,没有 NuGet 包,您需要添加库并自行更新它们

评论

0赞 Tsury 2/7/2015
您从哪里获得对 CefGlue 的支持?bitbucket 网站几乎从不更新。
1赞 Artem 2/7/2015
在 bitbucket 上,名为 fddima 的用户是存储库的所有者。我联系了他。在我做这件事的时候,他对我将要开的票证和我提交的 PR 非常敏感。不知道从那以后它是否发生了变化。
0赞 Sjoerd222888 8/25/2015
@Tsury:对 CefGlue 的支持可以在这里找到:magpcss.org/ceforum/viewforum.php?f=14
5赞 cubuspl42 10/17/2015
CefSharp 似乎不支持 Mono
0赞 Stefan Steiger 3/12/2019
@cubuspl42:CefSharp 使用 C++.NET,仅在 Windows 上受支持,即使在 .NET-Core。
5赞 David Desmaisons 6/30/2015 #2

为了完成 Artem 的回答,CefSharp 仅提供与 C# 的基本 javascript 集成,而 CefGlue 通过公开 CEF 提供的所有 javascript 绑定提供了一个更完整的集成解决方案。

关于 Nugets 包,我刚刚为 .Net 4.5 创建了 CEFGlue nuget 包,面向 3.2272.2035 CEF 版本:Unofficial.CefGlue.WPF 和 Unofficial.CefGlue.WindowsForm

评论

0赞 Sören Kuklau 9/21/2015
好!你会维护这些软件包吗?
0赞 David Desmaisons 9/22/2015
最近,社区有一个很好的举措,以便制作官方包并将它们集成到 CEFGlue 发布过程中,请参阅:相关的 Gitbuckect 问题
22赞 2 revs, 2 users 77%Hans Passant #3

现在是2018年。项目的命运发生了很大变化。CefSharp 还活着,几乎每天都在 GitHub 存储库中更新。问题正在得到解决,目前只有 57 个未解决的问题和 1787 个已关闭的问题。CefGlue 似乎做得不好。邮件列表已经奄奄一息,最近没有更新。GitHub 上有两个分支解决了上一个发布的 CefGlue 版本之外的问题。

除此之外,基本面没有改变。CefSharp 依赖于 C++/CLI 代码,最初是一种获取 .NET 到 C++ 互操作正在进行中。但这只能在 Windows 计算机和面向 .NET Framework 完整桌面版本的项目中工作。

但不是 Mono、.NET Core(与 Xamarin 和 UWP 应用相关)或任何旨在移植到另一个操作系统的库或项目。 在这种情况下,C++/CLI 不是一个选项,pinvoke 必须是回退。所以CefGlue。

评论

1赞 RA. 7/15/2018
好吧,看起来我们真的需要一些新的东西来支持多平台。
0赞 Warren Seine 10/5/2018
CefGlue 最近更新并支持 Chrome 68(但仍然没有官方的 Nuget 包)。
16赞 Letum 10/27/2018 #4

现在是2018年底,老实说,它看起来很严峻。

CefSharp 虽然正在积极开发中,并且有一些很好的文档,但仍然不支持 .NET Core 或 Mono,使其无法用于任何与 .NET Core、.NET Standard 或 Mono 相关的内容(我们专门将 Linux 用于生产服务器,所以这是一个很难的,可悲的是)。

相比之下,根据其他海报,CefGlue 显然支持 .NET Core/Mono。然而,这很重要,该项目转移到了 GitLab,并且没有任何许可证。该网站也无法访问(至少是我找到的那个),并且文档不存在。

不过,这里有一个分支似乎再次处于非活动状态。这里还有一个 .NET Core 的非官方端口,但这似乎对 Avalonia 有严格的依赖关系。

但是,有 Chromely,它似乎支持跨平台,并且基于 CefSharp 和 CefGlue(以及它们的非官方端口)。不过,这似乎是一个成熟的浏览器,而不是一个用于在应用程序中嵌入某些内容的库。

由于我最初正在寻找一种简单的方法来在我的应用程序中嵌入无头浏览器以进行抓取(无需安装 Chrome),因此我也查看了 Awesomium,但他们似乎已经转移到一个名为“Ultralight”的新项目,该项目不支持 C#,目前没有绑定。

作为最后的努力,似乎有 Optimus,它似乎支持 .NET Standard,并且是 .NET 中 WebBrowser 的完整实现,减去 GUI。我会尝试一下,如果它有效(或无效),我可能会编辑这个答案。

评论

0赞 jjxtra 8/6/2019
擎天柱有办法生成图像吗?
1赞 Gyum Fox 8/25/2021
2021, no traces of Optimus. I guess it did not work.