参考:
https://github.com/cefsharp/CefSharp/issues/601
https://gist.github.com/BlackBooth/19ce027c4f68c1eb4fc1144988ca6662
关键点:
(1)设置CefSettings的BrowserSubprocessPath属性为对应的CefSharp.BrowserSubprocess.exe的路径;
(2)在Program.cs中加载相关程序集;
-
将Cefsharp相关库放到bin\Debug\cefLib目录中
-
添加CefSharp类库引用,并把相关库的属性(复制本地)设置为false,这样VS就不会自动复制相关库到运行目录下;
-
修改Program.cs的代码如下,
注:在Program.cs中不能引用相关的Cefsharp相关库,否则会加载Cefsharp程序集失败
;
static class Program
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
AppDomain.CurrentDomain.AssemblyResolve += OnResolveAssembly;
CefSettingClass.InitializeCefSetting();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
//解析程序集失败,会加载对应的程序集
private static Assembly OnResolveAssembly(object sender, ResolveEventArgs args)
Assembly executingAssembly = Assembly.GetExecutingAssembly();
AssemblyName assemblyName = new AssemblyName(args.Name);
var assemblyAllName = assemblyName.Name + ".dll";
//加载CefSharp相关库
if (args.Name.StartsWith("CefSharp"))
string assemblyPath = Path.Combine(Application.StartupPath, CefSettingClass.CefLibName, assemblyAllName);
return File.Exists(assemblyPath) ? Assembly.LoadFile(assemblyPath) : null;
//判断程序集的区域性
if (!assemblyName.CultureInfo.Equals(CultureInfo.InvariantCulture))
assemblyAllName = string.Format(@"{0}\{1}", assemblyName.CultureInfo, assemblyAllName);
using (Stream stream = executingAssembly.GetManifestResourceStream(assemblyAllName))
if (stream == null) return null;
var assemblyRawBytes = new byte[stream.Length];
stream.Read(assemblyRawBytes, 0, assemblyRawBytes.Length);
return Assembly.Load(assemblyRawBytes);
- 新增CefSettingClass类,用于初始化CefSharp;
class CefSettingClass
public const string CefLibName = "cefLib"; //cef目录名称
/// <summary>
/// 初始化CEF的配置
/// </summary>
public static void InitializeCefSetting()
string appPath = Application.StartupPath;
CefSettings settings = new CefSettings
Locale = "zh-CN", //中文
BrowserSubprocessPath = Path.Combine(appPath, CefLibName, "CefSharp.BrowserSubprocess.exe"), //设置浏览器子程序启动路径
Cef.Initialize(settings);
- 主窗口代码如下,初始化并添加浏览器控件到主窗口中:
public partial class MainForm : Form
private ChromiumWebBrowser browser;
public MainForm()
InitializeComponent();
private void MainForm_Load(object sender, EventArgs e)
browser = new ChromiumWebBrowser("https://www.baidu.com")
Dock = DockStyle.Fill
this.Controls.Add(browser);
this.Closing += OnClosing;
private void OnClosing(object sender, CancelEventArgs e)
Cef.Shutdown();
- 最终的程序运行目录和运行结果如下:


//实例一个Cef设置,设置其中的本地缓存路径
CefSettings Settings = new CefSettings();
Settings.CachePath = Directory.GetCurrentD...
背景项目中引用CefSharp类库,将会有一堆的文件需要放置到bin\debug目录下,有强迫症的开发者希望将CefSharp的文件单独放到一个目录下,这样程序文件将会看起来比较整洁。方法1.将CefSharp的文件,复制到bin\Debug\resources\cefsharp_x86,,其中resources\cefsharp_x86就是自定义目录。看上去像这样:2.项目添加CefSharp类...
scoped_refptr<RootWindow> rootWin = context->GetRootWindowManager()->CreateRootWindow(window_config);
这个窗口要修改尺寸,说简单也很简单,只需要
rootWin->SetBounds(0, 0, ww, hh);
从Program.cs开始1、以SimpleBrowser运行系统const bool simpleSubProcess = false;
这行代码标识系统是以什么模式启动。是以简单窗口SimpleBrowserForm启动还是以复杂窗口BrowserForm启动。settings.BrowserSubprocessPath = "CefSharp.WinForms.Example.exe";
这里写的是对于小白来说更多的了解系统编程的文章,有写的不对的地方还恳请各位大佬指出错误,小编一定会多多采纳[手动多谢]。
那么,上一次我们稍微了解了一下关于系统编程的一些主要内容[没有看到的童鞋还请去上一篇文章稍微复习一下噢]。
这节课,我们先来想一想,我们为什么要学系统编程呢?原因很简单,我们要充分的利用CPU的性能,CPU和我们人类不太一样,我们人类大多数情况下,在同一时间,只能完成一件事,而CPU作为无数科学家的心血当然不会这么简单,CPU能够同时进行多个进程,这里的进程我们可以理解成任务,
(1)如果浏览器位置有问题,需要设置 Cef.EnableHighDPISupport();
(2)如果要放大浏览器,需要设置 browser.SetZoomLevel(1.25);
ChromiumWebBrowser webbrowser = new ChromiumWebBrowser("");
private void Form1_L...
源于Google官方
CEF ,全称Chromium Embedded Framework ,基于谷歌 Chromium项目的开源Web Browser控件,它的主要用途是嵌入了第三方应用以实现浏览器相关的功能。例如国内的360安全浏览器的兼容模式即IE的内核,极速模式即Chromium内核;最近微软新推出的Microsoft Edge也是基于Chromium开源项目实现的,看起来挺简洁的。
CEF地址:https://bitbucket.org/chromiumembedded
做了一个winform项目,用到cefsharp,想把cefsharp的一大堆文件放在应用程序的子目录。解决方案:项目中dll设置为不负责+probing配置
https://github.com/cefsharp/CefSharp/issues/601
https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/spe...