【整理总结】代码沉淀 - CefSharp - 比较流行的第三方内嵌浏览器组件
.NET (WPF and Windows Forms) bindings for the Chromium Embedded Framework
web: https://github.com/cefsharp/CefSharp
nuget: Install-Package CefSharp.Wpf
比较流行的第三方内嵌浏览器组件,虽然还是一如既往的坑,但是最起码很多人踩,所以就用它了。
更多相关项目,请访问代码沉淀目录
重要提示:请注意项目的版本,以官方最新版本为准。
在很久很久之前,就有很多人提过在一个窗体程序内嵌入浏览器,于是我最后也用到了,于是就记录一下踩得坑,留作备忘。
1. cef子进程的开始与关闭,如果你的程序出现了子进程的这种问题,请调用:
CefSharp.Cef.Shutdown();
2. 右键菜单问题,很多配置cefsharp都考虑到了,虽然实现起来各种麻烦。
class MyCefMenuHandler : CefSharp.IContextMenuHandler { // 其它方法的实现不是重点。 // 其它参数也不是重点。 public void OnBeforeContextMenu(IMenuModel model) { model.Clear(); } }
3. 网页语言问题,很多网站会根据请求头的区域标识,返回对应的语言的网页,比如微信,所以我们要标识我首选就是中文,先给我返回我认识的国语网页。
// 其他方法不是重点(不过实现一次接口你都想死,太多方法了!) // 其他参数也不是重点 // 一定要重新覆盖访问头,直接赋值没卵用! public CefReturnValue OnBeforeResourceLoad(IRequest request) { var headers = request.Headers; headers.Set("accept-language", "zh-CN,zh;q=0.8,en;q=0.6"); request.Headers = headers; return CefSharp.CefReturnValue.Continue; }
4. 大家可能都遇到的问题,WPF专用的CefSharp控件,不支持设计时,这你就没法子了,我是觉得烦就后台生成浏览器控件的实例,这一帮官方的开发人员也真是够懒的,到现在了还不添加设计时支持,真是吃干饭的。
5. 我看到exe同级目录下那么多dll,就蛋疼,于是就做了资源转移,其他dll用的“Costura.Fody”,至于Cef方面的,就只能老老实实转一大圈了。

1 // 首先,让Costura.Fody组件不合并CefSharp相关的资源文件,因为非托管啥的资源还有子线程,你不可能真的都打包。 2 // FodyWeavers.xml 3 <Weavers> 4 <Costura ExcludeAssemblies="CefSharp|CefSharp.Core|CefSharp.Wpf"/> 5 </Weavers> 6 // 接下来,我们不是把dll挪到别的目录么,程序启动搜索dll,就要多一些地方,比如我放在子目录里。 7 // App.Config 8 <configuration> 9 <runtime> 10 <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 11 <probing privatePath="x86\cef" /> 12 </assemblyBinding> 13 </runtime> 14 </configuration> 15 // 接下来,把cef相关的20个文件,locales目录的53个文件全扔到x86\cef目录里,并修改Cef初始化配置。 16 internal static void Build() 17 { 18 string lib, browser, locales, res; 19 // Assigning file paths to varialbles 20 lib = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"x86\cef\libcef.dll"); 21 browser = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"x86\cef\CefSharp.BrowserSubprocess.exe"); 22 locales = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"x86\cef\locales\"); 23 res = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"x86\cef\"); 24 var settings = new CefSettings(); 25 settings.BrowserSubprocessPath = browser; 26 settings.LocalesDirPath = locales; 27 settings.ResourcesDirPath = res; 28 Cef.Initialize(settings, true, null); 29 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本