参考: https://github.com/cefsharp/CefSharp/issues/601
https://gist.github.com/BlackBooth/19ce027c4f68c1eb4fc1144988ca6662

关键点:
(1)设置CefSettings的BrowserSubprocessPath属性为对应的CefSharp.BrowserSubprocess.exe的路径;
(2)在Program.cs中加载相关程序集;

  1. 将Cefsharp相关库放到bin\Debug\cefLib目录中
    在这里插入图片描述

  2. 添加CefSharp类库引用,并把相关库的属性(复制本地)设置为false,这样VS就不会自动复制相关库到运行目录下;
    在这里插入图片描述

  3. 修改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);
  1. 新增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);
  1. 主窗口代码如下,初始化并添加浏览器控件到主窗口中:
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();
  1. 最终的程序运行目录和运行结果如下:在这里插入图片描述
    在这里插入图片描述
//实例一个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&lt;RootWindow&gt; rootWin = context-&gt;GetRootWindowManager()-&gt;CreateRootWindow(window_config); 这个窗口要修改尺寸,说简单也很简单,只需要 rootWin-&gt;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...