启用 32 位应用程序:true的作用_让 CefSharp.WinForms 应用程序同时支持32位(x86)和64位(x64)的解决方案...

当我们为基于 .NET Framework 的 WinForm 程序增加 CefSharp.WinForms 依赖后,可能会遇到以下报错信息:

CefSharp.Common is unable to proceeed as your current Platform is ‘AnyCPU’. To target AnyCPU please read https://github.com/cefsharp/CefSharp/issues/1714. Alternatively change your Platform to x86 or x64 and the relevant files will be copied automatically. For details on changing your projects Platform see https://docs.microsoft.com/en-gb/visualstudio/ide/how-to-configure-projects-to-target-platforms?view=vs-2017 CefSharpDemo

CefSharp.Common.targets

我们可以通过“配置管理器”为项目设置具体的 x86 或 x64 目标平台来消除该报错,同时我们也可以通过一些设置让我们的程序同时支持 x86 和 x64 目标平台。本篇将简述如何为依赖来 CefSharp.WinForms 的程序启用 AnyCPU 支持。英文版的操作步骤可参见:Feature Request – Add AnyCPU Support 。

为依赖 CefSharp 的程序增加 AnyCPU 支持

笔者新建了一个名为 CefSharpDemo 的 WinForm 项目,并通过 NuGet 引入 CefSharp.WinForms 组件:

79a79817f204ed4ff2ef7ab42612b8f1.png

首先,在项目上点击右键,选择“卸载项目”,在项目卸载成功后,再次点击右键,选择“编辑项目文件”。之后会看到以下类似的窗体:

38beae50492241068181c00d90e5db1a.png

在第一个 PropertyGroup 标签里增加 true 代码段:

fb52f97b89741585bb7c8779c46972b6.png

修改完成之后,再次在项目文件上右击,选择“重新加载项目”。此番操作之后,项目的生成就不会报错了,可以发现在 bin 目录中多出了名为 x86 和 x64 的两个文件夹,分别对应 32 位和 64 位的应用程序。接下来我们需要在程序中根据运行环境,动态选择要加载的文件。

CefSharp 依赖文件的动态加载

我们可以通过 AppDomain.CurrentDomain.AssemblyResolve 事件将应用程序所需的组件注册进来。以下代码实现了该功能,并且根据是否 64 位进程选择具体加载哪个目录中的程序集:

using CefSharp;using CefSharp.WinForms;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Reflection;using System.Runtime.CompilerServices;using System.Threading.Tasks;using System.Windows.Forms;namespace CefSharpDemo{static class Program{/// /// 应用程序的主入口点。/// [STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);AppDomain.CurrentDomain.AssemblyResolve += Resolver;LoadApp();}[MethodImpl(MethodImplOptions.NoInlining)]private static void LoadApp(){var settings = new CefSettings();// Set BrowserSubProcessPath based on app bitness at runtime
settings.BrowserSubprocessPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase,Environment.Is64BitProcess ? "x64" : "x86","CefSharp.BrowserSubprocess.exe");// Make sure you set performDependencyCheck falseCef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null);var frmMain = new FrmMain();Application.Run(frmMain);}// Will attempt to load missing assembly from either x86 or x64 subdirprivate static Assembly Resolver(object sender, ResolveEventArgs args){if (args.Name.StartsWith("CefSharp")){string assemblyName = args.Name.Split(new[] { ',' }, 2)[0] + ".dll";string archSpecificPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase,Environment.Is64BitProcess ? "x64" : "x86",
assemblyName);return File.Exists(archSpecificPath)? Assembly.LoadFile(archSpecificPath): null;}return null;}}}

至此,我们便实现了对 CefSharp 的 AnyCPU 支持。

CefSharp 应用支持 AnyCPU 的优缺点与解决方案

众所周知,相对于 32 位应用程序,64 位的应用拥有更快运行的运行速度,以及支持更多的内存。相对于分别对 x86 和 x64 分别发包的方式,AnyCPU 发包减少了运维成本,同时降低了客户下载程序包之后不能运行的风险。

但是 AnyCPU 的弊端也是很明显的:64 位的 libcef.dll 文件达到了 110兆,即便是本文所示的简单示例,全部文件的大小也达到了三百多兆:

47f79ae9dc7fcdc5a34f19607a7bd7df.png

要解决这个问题,我们可以在程序运行时动态去下载对应的依赖文件,该下载操作只要确保在调用 CefSharp 之前即可。

源代码

本文源代码:https://gitee.com/coderbusy/demo/tree/master/WinForm/CefSharpDemo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cefsharp.winforms.netcore 114.2.100 是一个适用于 Windows Form 应用程序的 Chromium Embedded Framework(CEF)的 .NET Core 版本。在该版本中,CEFSharp 提供了对视频播放的支持CEFSharp 是一个基于 CEF 的 .NET 接口封装,它允许开发人员在自己的 .NET 应用程序中嵌入一个完整的 Chromium 浏览器。通过使用 CEFSharp,开发人员可以轻松地在 Windows Form 应用程序中实现强大的浏览器功能,包括支持 HTML5 标准的视频播放。 使用 CEFSharp 进行视频播放非常简单。首先,需要确保你的应用程序引用了正确的版本,并且安装了相关的依赖项。然后,在你的 Windows Form 页面中,你可以使用 CefSharp.WinForms.ChromiumWebBrowser 控件来嵌入浏览器。 在浏览器加载网页时,如果网页中包含视频元素,CEFSharp 将会自动处理视频播放。你可以使用嵌入好的浏览器控件的方法和事件来控制视频播放,例如播放、暂停、停止等。 在 CEFSharp 中,也可以使用自定义的 JavaScript 代码来操作视频播放。你可以通过调用 JavaScript 代码在 C# 中控制视频的播放状态。要实现自定义的视频控制,你可以使用 CefSharp.WinForms.IJavascriptCallback 接口来进行通信。 总结来说,cefsharp.winforms.netcore 114.2.100 提供了对视频播放的支持。开发人员可以使用 CEFSharp 在他们的 .NET Core Windows Form 应用程序中嵌入一个完整的 Chromium 浏览器并实现强大的视频播放功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值