更吹落,星如雨

CefSharp源代码编译

前几天在研究怎么定制CefSharp控件。CefSharp控件是一个封装了CEF(Chromium Embedded Framework)的 .NET类库,它可以实现一个简单浏览器的功能,可以在WPF/WinForms中使用。

其实CefSharp控件在C#层面已经把接口封装的不错了,很多功能可以直接使用。但是如果要扩展某些接口,则必须修改CEF或者Chromium里面的代码,再重新编译出CEF发行包,从CEF发行包制作成NuGet使用的nupkg文件。

开源项目的英文文档有些地方没有讲到,幸亏我是搞Chromium开发,不然真是坑死了。写篇文章总结一下。

编译CEF工程

因为开发CefSharp过程需要修改CEF内核的代码实现一些功能,而CEF代码又是基于Chromium的,所这里想讲一讲如何搭建CEF和Chromium的开发环境。

环境要求

  1. 电脑网络需要能够翻墙,因为代码和相关的工具需要翻墙才能更新。
  2. 系统至少是win7 x64或者更新的版本,因为Chromium不支持32位操作系统编译代码。因为需要Win 8.1 SDK,所以使用win 8.1系统比较合适。
  3. 电脑需要安装 Visual Studio 2013 Update 4,目前Chromium只支持这个版本的VS编译代码。
  4. 电脑至少8GB内存,否则可能链接不成功。
  5. 获取下来的CEF和Chromium代码有10GB左右大小,编译的中间文件有40GB大小,请确保有80GB的硬盘剩余空间。
  6. 为了加快编译速度,建议使用SSD固态硬盘。
  7. 目前我电脑的硬件是i7 4790K CPU,32GB DDR3内存,固态硬盘,这样的配置编译一次CEF代码的Release版需要75分钟。

设置系统区域

默认的中文操作系统系统区域设置的值为“中文(简体,中国)”,但是这样的区域设置编译CEF代码无法通过,需要把系统区域设置成“英语(美国)”。打开“控制面板”,点开“区域”->“管理”,点击“更改系统区域设置”,把”区域设置”更改成“英语(美国)”。更改完成之后需要重启一次电脑。重启完电脑再确认一下是否更改成功。

安装配置Depot Tools工具

CEF和Chromium工程是靠Depot Tools工具来管理源代码的,所以需要先安装Depot Tools工具。
Chromim安装 Depot Tools工具的教程如下:http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up 。

从上面这个教程里总结到以下简单步骤:

  1. 从这里下载Depot Tools安装包 https://src.chromium.org/svn/trunk/tools/depot_tools.zip 。
  2. 把下载好的安装包解压到一个英文路径的目录,比如E:depot_tools。
  3. 将E:depot_tools路径加入到系统的环境变量Path中。
  4. 配置Depot Tools中的git工具。打开cmd,按照以下规则运行以下命令:

获取CEF代码

CEF工程已经为我们提供了一个automate-git.py脚本来更新代码,下载地址是:https://bitbucket.org/chromiumembedded/cef/raw/master/tools/automate/automate-git.py 。

在E盘建立一个cef目录,把下载的automate-git.py文件放在这个目录。并在这个cef目录下建立一个名为3.2454.1344_update.bat的文件,其文件中内容如下:

在cmd中运行3.2454.1344_update.bat批处理文件就会自动获取代码以及对应的开发工具。获取到的代码会放到E:cefdownload目录。

注意:CefSharp未来不再支持xp系统了,目前支持xp系统的最新CefSharp版本是3.2454.1344,基于的Chromium版本是45,所以我们编译的对应CEF代码分支是2454。参见这个文档https://github.com/cefsharp/CefSharp/wiki/Windows-XP-No-Longer-Supported 。

运行3.2454.1344_update.bat更新的代码大小10GB左右,还需要网络能够翻墙,所以持续的时间很长,如果中间有失败,可能需要重新开始。

编译CEF代码

更新好CEF代码后,就可以编译了。在E:cef目录建立一个名为3.2454.1344_all.bat的文件,其内容如下:

在cmd中运行3.2454.1344_all.bat,就开始编译CEF,这个过程需要编译debug和release版本,每次需要编译大概14000个文件,总共编译时间为3小时左右。

最终编译出的E:cefdownloadchromiumsrccefbinary_distribcef_binary_3.2454.1344.g2782fb8_windows32.zip就是我们所需要的。

生成nupkg包

一般情况下使用CefSharp控件,是用nuget程序包管理工具来获取对应的nupkg包,然后自动添加到c#工程中。因为我们自己定制CefSharp,则是自己生成nupkg,然后手动添加到c#工程中。

CefSharp的WPF程序最终发布使用,依赖以下5个nupkg包:

  1. cef.redist.x86.3.2454.1344.nupkg,32位程序CEF nupkg包。
  2. cef.redist.x64.3.2454.1344.nupkg,64位程序CEF nupkg包。这个64位包是可选的,目前我们构造的都是32程序,不使用这个包。但是因为内部依赖关系,还是带上这个包。
  3. cef.sdk.3.2454.1344.nupkg,CefSharp中间工程依赖这个包。
  4. CefSharp.Common.45.0.0.nupkg,CefSharp控件基础nupgk包。
  5. CefSharp.Wpf.45.0.0.nupkg,CefSharp控件WPF nupgk包。构建WPF程序需要依赖这个包。

生成CEF nupkg包

我们先来生成CEF nupkg包,这个需要根据cef-binary项目https://github.com/cefsharp/cef-binary 来操作。

我们先获取到cef-binary项目代码到E:githubcef-binary目录。然后把编译生成的CEF binary_distribcef_binary_3.2454.1344.g2782fb8_windows32.zip解压到E:githubcef-binarycef_binary_3.y.z_windows32目录。因为实际上我只需要32位nupkg包,所以我们没有在CEF工程中编译64位CEF模块,我们直接去CEF builds网站下载64位的发行包。同理,把这个下载的发行包文件解压放到cef_binary_3.y.z_windows64目录。

然后用PowerShell来运行E:githubcef-binarybuild.ps1文件。这一步可能会失败,提示NuGet.exe错误。原因是%AppData%LocalNuGetNuGet.exe是错误的,这个需要拷贝一个正常NuGet.exe文件到那个目录。

运行完E:githubcef-binarybuild.ps1,会在E:githubcef-binaryNuGet目录生成以下几个文件:

  1. cef.redist.x64.3.2454.1344.nupkg
  2. cef.redist.x86.3.2454.1344.nupkg
  3. cef.sdk.3.2454.1344.nupkg

生成CefSharp nupkg包

我们先获取CefSahrp项目的代码https://github.com/cefsharp/CefSharp 。然后配置NuGet.config的依赖nupkg包到cef-binary工程生成的nupkg包目录。然后用vs打开E:githubCefSharpCefSharp3.sln,开始编译工程。这一步会自动使用我们生成的nupkg包。

编译CefSharp3.sln成功之后,在用PowerShell打开E:githubCefSharpbuild.ps1文件,这一步会生成以下nupkg文件:

  1. CefSharp.Common.45.0.0.nupkg
  2. CefSharp.OffScreen.45.0.0.nupkg
  3. CefSharp.WinForms.45.0.0.nupkg
  4. CefSharp.Wpf.45.0.0.nupkg

其中,CefSharp.Common.45.0.0.nupkg和CefSharp.Wpf.45.0.0.nupkg是我们所需要的。

使用nupkg包

配置本地程序包源

把cef-binary和CefSharp工程生成的nupkg文件放到一个目录,比如E:oschinaCefSharpLocal-package-source目录。建立一个Wpf工程WpfApplicationDemo。然后从“工具”->“NuGet程序包管理器”->“程序包管理器设置”打开设置,选择“程序包源”,如图:

20160102220605

我们设置添加一个本地的nupgk源,叫做“Local-package-source”,它的源地址是E:oschinaCefSharpWpfApplicationDemo..Local-package-source,源地址目录存放的是我们之前生成的那些nupgk文件。并且把我们的源放到第一位,在系统默认的nuget.org前面这么做的理由是系统默认的nuget.org源里面也有CefSharp等控件,会覆盖掉我们本地的CefSharp控件,从而导致功能不生效。

使用CefSharp.Wpf控件

这里有篇文档介绍如何使用CefSharp.Wpf控件,http://www.codeproject.com/Articles/881315/Display-HTML-in-WPF-and-CefSharp-Tutorial-Part 。

我以WpfApplicationDemo为例子简单介绍一下。

首先设置工程的配置管理器。从Any CPU的配置拷贝过来,新建一个x86的配置,然后项目的工程选择成x86。然后编辑代码,打开MainWindow.xaml文件,编辑以下代码:

红色部分代码是我们新加的。我们代码中添加了cefSharp控件,并且打开了https://www.baidu.com/

编译工程,就会根据依赖自动安装CefSharp.Wpf控件。我们打开NuGet程序包管理器,选择已安装的包,如图:

20160102220907

选择CefSharp.Wfp包,可以看到创建者是http://blog.gclxry.com/,则表明我们正确的使用了我们自己生成的包。

运行工程,可以看到界面如下图所示:

更吹落,星如雨 CefSharp源代码编译相关推荐

  1. 【CLR的执行模型:将源代码编译成托管模块】

    CLR:由多种不同编程语言使用的运行库 托管模块:中间语言和元数据 非托管语言:C/C++,不过此为特殊,可以写成托管代码 托管语言:C# 托管模块 1,PE32/PE32+头:PE32运行在win3 ...

  2. 从源代码编译里程碑的 ICS ROM

    从源代码编译里程碑的 ICS ROM 操作系统选择 Ubuntu 10.04, 可以用虚拟机: 安装 Android SDK , 并更新: 打开命令行窗口, 输入下面的命令, 准备编译环境:  sud ...

  3. java 源码分析_Java 源代码编译成 Class 文件的过程分析

    原标题:Java 源代码编译成 Class 文件的过程分析 在上篇文章< Java三种编译方式:前端编译 JIT编译 AOT编译 >中了解到了它们各有什么优点和缺点,以及前端编译+JIT编 ...

  4. Linux源代码编译安装详解

    使用源代码编译安装软件有以下优点,获取软件的最新版及时修复bug,软件功能可按需选择或定制,有更多软件可供选择,源码包适用于各种平台. 工具/原料 一台装有Linux操作系统的电脑 接入互联网络并能正 ...

  5. linux ubuntu pkg-config工具的使用(源代码编译库接口查询工具)

    后更... 文章目录 1. pkg-config介绍 2. pkg-config的使用 1. pkg-config介绍 pkg-config是一个在源代码编译时查询已安装的库的使用接口的计算机工具软件 ...

  6. python3源代码_Python3源代码编译安装

    Python3源代码编译安装 安装必要工具 yum-utils ,它的功能是管理repository及扩展包的工具 (主要是针对repository) $ sudo yum install yum-u ...

  7. 【AWSL】之Linux源代码编译及配置yum源(tar 解包、./configure配置软件模块、make)

    源代码编译 序言 一.源代码概述 1.使用源代码安装软件的优点 2.应用场合举例 3.安装源代码软件为什么使用编译安装 二.编译安装的基本思路 三.配置本地yum源仓库 四.`yum常用命令` 五.` ...

  8. python源码编译安装 gb18030_源代码编译安装Python3.5.2

    由于没有找到Python3.5的rpm安装包,因此进行源代码编译安装 1.下载Python3.5.2 [root@seastar ~]# cd /usr/local/src [root@seastar ...

  9. mysql5.5.8编译安装_MySQL5.5.8源代码编译安装

    /*安装CMake*//*进入CMake源代码所在目录*/cd #/*解压CMake源代码*/tar zxf cmake-2.8.3.tar.gz /*进入CMake源代码目录*/cd cmak 首页 ...

最新文章

  1. Google、微软、阿里、腾讯、百度这些大公司在GitHub上开源投入排名分析 | CSDN原力计划...
  2. python使用界面-用python编写简单ui界面窗口
  3. python怎么输入代码-如何编写python代码
  4. sort--排序函数
  5. 打造大型直播平台之《PC客户端架构》
  6. idea代码可以编译但是爆红_推荐一款 IDEA 生成代码神器,写代码再也不用加班了...
  7. 40道C语言大学经典例题及代码(免费 全)
  8. 咸宁php培训,PHP培训
  9. 北京邮电计算机课程表,北邮通信工程本科专业课程表
  10. python 矩阵对应元素相乘,python 矩阵对应元素相乘_Numpy——numpy的基本运算
  11. 网络流量分析利器-可视化网络-netflow【1】-基础原理
  12. Unity 3D官方教程——2D Roguelike学习记录
  13. RK3568 Android12 长按power键功能设置
  14. AIDL中should be declared in a file错误
  15. 怎么把PDF转换成图片?教大家两种方式转换
  16. ADB命令获取手机应用安装包
  17. python列表怎么比较大小_python列表怎么比较大小
  18. 【异常检测】基于主成分分类器的异常检测方案(文献学习)
  19. 个人云电脑—Parsec
  20. 计算机网络安全的一些概念以及知识点

热门文章

  1. R语言【逻辑控制】【数学运算】
  2. 支付宝的「社交」到底行不行?
  3. caffe源码分析-layer
  4. 正确使用苹果手机技巧的3个方法,你知道吗?
  5. Siemens Simatic PCS 7.5 version 9.1
  6. MySQL可视化工具Webyog_SQLyog13.1.1.0使用教程
  7. android 高仿小米note2,小米Note2最大遗憾重演,安卓新机皇屏幕素质翻车,三星偷着乐?...
  8. 深度体验:6.2英寸大屏手机三星S8+ 让你玩到爽
  9. 帝国导航支持二级栏目高亮(纯PHP)
  10. 哪些 Python 库让你相见恨晚?