【混合开发】CefSharp+Vue桌面应用程序开发

为什么选择CefSharp+Vue做桌面应用程序

CefSharp 基于 Chromium Embedded Framework (CEF) ,它可以将 Chromium 浏览器的功能嵌入到 .NET 应用程序中。通过 CefSharp,开发者可以在桌面应用程序中集成 Web 技术,包括 HTML、JavaScript、CSS 等,来实现丰富的用户界面和交互体验。大厂产物,稳定性高。

Vue.js 渐进式 JavaScript 框架,专注于构建用户界面的前端框架。Vue 通过组件化的开发方式,易于集成和扩展,使开发者能够快速构建响应式、动态的 Web 应用。

把 CefSharp 与 Vue.js 结合使用,可以通过桌面应用嵌入 Web 技术实现现代的用户界面。CefSharp 相当于一个浏览器引擎,用来显示 Vue.js 渲染的页面。这样,既能享受桌面应用程序的性能,又能利用 Web 技术来构建交互性强、富有表现力的界面。类似于用自定义化浏览器实现桌面应用程序。

优势:

  1. 提升桌面应用的用户体验:借助 Vue.js 的现代化前端技术,开发者能够创建更具吸引力和互动性的桌面应用。
  2. 增强开发的灵活性与效率:CefSharp 提供强大的桌面功能,而 Vue.js 提供快速开发界面的能力,两者结合可以显著提升开发效率。
  3. 促进跨平台桌面应用的开发:通过 Vue.js 与 CefSharp,开发者可以更轻松地创建支持多平台的桌面应用,尤其是在需要集成 Web
    功能时。

两种选择

  1. 使用CefSharp加载公网地址,实现内嵌web页面。
  2. 使用CefSharp加载Vue本地包,实现高定制化应用程序。
实现方式加载公网地址加载 Vue 本地包
数据来源从互联网上加载(通过 URL)从本地文件系统加载(通过文件路径)
网络依赖需要稳定的网络连接,依赖公网服务器无需网络连接,直接通过本地文件加载
资源更新资源更新需要更新服务器上的 Web 页面资源更新只需要重新构建本地 Vue 项目并替换本地文件
开发调试可以直接在 Web 环境中调试,使用浏览器开发工具调试需要通过本地构建工具调试 Vue 项目
性能开销加载速度依赖于服务器和网络条件加载速度较快,无需网络请求,完全由本地文件提供支持
适用场景用于需要动态更新且依赖外部 Web 服务的应用用于本地化、独立于网络的桌面应用
交互性适合涉及到网络数据交换的场景与本地功能的交互性较强,适合本地数据库或本地功能的集成
资源管理资源管理集中在 Web 服务器端,前端需要通过网络获取所有资源(如 JS、CSS、图片等)都需要嵌入到本地文件中
UI 更新需要服务器端更新和部署本地更新,用户需要手动更新本地应用或通过自动化更新机制来更新
本地访问只能 JavaScript 与本地 API 进行交互,可能跨域可以直接通过本地 API 与 Vue 页面进行交互或使用本地方法传递数据

使用CefSharp加载公网地址

1.安装IDE

注意:Vscode不能开发winform,所以直接安装VS2019。千万不要装最新版,最新版不支持.net 4.X,但Cefsharp基于.net 4.X.

官方网址:https://learn.microsoft.com/zh-cn/visualstudio/releases/2019/release-notes

安装时选择.Net桌面开发(大约8G):
在这里插入图片描述

2. 环境准备

创建项目:
在这里插入图片描述
在这里插入图片描述
IDE自动生成项目初始化代码并进入设计界面:
在这里插入图片描述
打开包管理器:
在这里插入图片描述
选择CefSharp.WinForms:
在这里插入图片描述
注意:
如果NuGet包管理器无法使用,提示链接超时或被拒绝。进行以下操作:

  • 关闭VS,删除C:\Users\xxx\AppData\Roaming\NuGet下的整个nuget.config文件。
  • CMD管理员权限执行以下:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" /v DisabledByDefault /t REG_DWORD /d 0 /f /reg:32
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" /v DisabledByDefault /t REG_DWORD /d 0 /f /reg:64
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" /v Enabled /t REG_DWORD /d 1 /f /reg:32
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" /v Enabled /t REG_DWORD /d 1 /f /reg:64

选择X86平台:
如果没有,则新建。此处是为了兼容性选择了X86,否则无法在32位环境运行(向下兼容)。
在这里插入图片描述
在这里插入图片描述
注意:
CefSharp基于.Net4.X,所以当前项目版本必须是基于.Net 4.X,如果不是,可以在项目属性修改。
如果没有4.X的选项,则需要额外安装。

在这里插入图片描述

Cef必须使用对应的.net版本:
在这里插入图片描述

2.编程

using CefSharp;
using CefSharp.WinForms;public partial class Form1 : Form
{public Form1(){InitializeComponent();InitializeChromium();}private ChromiumWebBrowser chromeBrowser;private void InitializeChromium(){Cef.Initialize(new CefSettings());chromeBrowser = new ChromiumWebBrowser("https://www.baidu.com"){Dock = DockStyle.Fill};this.Controls.Add(chromeBrowser);}// 确保在程序关闭时释放资源protected override void OnFormClosing(FormClosingEventArgs e){chromeBrowser.Dispose();Cef.Shutdown();base.OnFormClosing(e);}
}

使用CefSharp加载 Vue 本地包

1.安装IDE

与前文一致

2.环境准备

与前文一致

3.编码

提前准备好前端界面代码包,执行命令打包前端程序:

npm run build

完成后,Vue.js 项目会生成一个 dist/ 或 build/ 文件夹,包含了 HTML、CSS、JS 等静态资源。

将 Vue 打包的静态文件放入本地资源路径。

使用C#加载打包文件:

using CefSharp;
using CefSharp.WinForms;public partial class Form1 : Form
{public Form1(){InitializeComponent();InitializeChromium();}private ChromiumWebBrowser chromeBrowser;private void InitializeChromium(){Cef.Initialize(new CefSettings());// 加载本地 Vue 包chromeBrowser = new ChromiumWebBrowser("file:///C:/你的自定义目录/vue/dist/index.html"){Dock = DockStyle.Fill};this.Controls.Add(chromeBrowser);}// 确保在程序关闭时释放资源protected override void OnFormClosing(FormClosingEventArgs e){chromeBrowser.Dispose();Cef.Shutdown();base.OnFormClosing(e);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/892800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从0开始学习搭网站第二天

前言:今天比较惭愧,中午打铲吃了一把,看着也到钻二了,干脆顺手把这个赛季的大师上了,于是乎一直到网上才开始工作,同样,今天的学习内容大多来自mdn社区mdn 目录 怎么把文件上传到web服务器采用S…

nacos环境搭建以及SpringCloudAlibaba脚手架启动环境映射开发程序

1:下载nacos 地址:https://github.com/alibaba/nacos/tags 2:选择server的zip包下载 3:启动mysql服务,新建数据库:nacos_yh 4:解压下载的nacos_server 进入conf目录 5:mysql运行sql脚本变得到下面的表 6&a…

Spring MVC流程一张图理解

由于现在项目中大部分都是使用springboot了,但是ssm中的springmvc还是可以了解一下 1 、用户发送请求至前端控制器 DispatcherServlet 。 2 、 DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。 3 、处理器映射器找到具体的处理器 ( 可以根据 xml 配…

数据分析如何正确使用ChatGPT进行辅助?

目录 1.数据介绍 2.特征工程 3.EDA分析 4.数据相关性分析 5.分析总结 一篇优秀的学术论文,肯定有新颖、适当的论证视角,选择恰当的研究方法,搭建逻辑严密、平衡的论证框架,把有力的数据分析紧密结合起来,这样一篇…

学习 Git 的工作原理,而不仅仅是命令

Git 是常用的去中心化源代码存储库。它是由 Linux 创建者 Linus Torvalds 创建的,用于管理 Linux 内核源代码。像 GitHub 这样的整个服务都是基于它的。因此,如果您想在 Linux 世界中进行编程或将 IBM 的 DevOps Services 与 Git 结合使用,那…

赛灵思(Xilinx)公司Artix-7系列FPGA

苦难从不值得歌颂,在苦难中萃取的坚韧才值得珍视; 痛苦同样不必美化,从痛苦中开掘出希望才是壮举。 没有人是绝对意义的主角, 但每个人又都是自己生活剧本里的英雄。滑雪,是姿态优雅的“贴地飞行”,也有着成…

openplant实时数据库(二次开发)

资源地址 我的网盘〉软件>数据库>openplant>openplant实时数据库(二次开发)

SpringBoot链接Kafka

一、SpringBoot生产者 (1)修改SpringBoot核心配置文件application.propeties, 添加生产者相关信息 # 连接 Kafka 集群 spring.kafka.bootstrap-servers192.168.134.47:9093# SASL_PLAINTEXT 和 SCRAM-SHA-512 认证配置 spring.kafka.properties.securi…

Win11下python 调用C++动态链接库dll

这里写自定义目录标题 Win11下python 调用C动态链接库dll环境修改C语言代码Visual Studio 2019生成dllPython 加载DLLpython 数据类型适配python调用函数 Win11下python 调用C动态链接库dll 在一些耗时的函数上考虑使用C进行加速,涉及把cpp文件转为dll,…

探索 Transformer²:大语言模型自适应的新突破

目录 一、来源: 论文链接:https://arxiv.org/pdf/2501.06252 代码链接:SakanaAI/self-adaptive-llms 论文发布时间:2025年1月14日 二、论文概述: 图1 Transformer 概述 图2 训练及推理方法概述 图3 基于提示的…

CSRF(跨站请求伪造)深度解析

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

5、docker-compose和docker-harbor

安装部署docker-compose 自动编排工具,可以根据dockerfile自动化的部署docker容器。是yaml文件格式,注意缩进。 1、安装docker-compose 2、配置compose配置文件docker-compose.yml 3、运行docker-compose.yml -f:指定文件,up&…

QNAP 上常用的几款软件

当我们谈到 NAS(Network Attached Storage)时,QNAP 凭借多年的产品迭代、稳定的硬件性能和不断丰富的软件生态,已成为很多家庭及中小型企业的首选。除了存储本身,QNAP 提供的各种官方软件和应用,也为用户带…

Jmeter进行http接口并发测试

目录: 1、Jmeter设置(1)设置请求并发数(2)设置请求地址以及参数(3)添加结果数 2、启动看结果 1、Jmeter设置 (1)设置请求并发数 (2)设置请求地址…

9,STL——vector类

一、vector类的介绍和使用 1,了解vector vector类的官方介绍https://cplusplus.com/reference/vector/vector/ 使用STL的三个境界:能用,明理,能扩展 1). vector是表示可变大小数组的序列容器。 2). 就像数组一样,…

基于考研概率论知识解读 Transformer:为何自注意力机制要除以根号 dk

Transformer自注意力机制中除以 d k \sqrt{d_k} dk​ ​深度剖析 【 Transformer 系列,故事从 d k \sqrt{d_k} dk​ ​说起】 LLM这么火,Transformer厥功甚伟,某天心血来潮~,再去看看! 它长这个样子: 深入…

Kafka权威指南(第2版)读书笔记

目录 Kafka生产者——向Kafka写入数据生产者概览创建Kafka生产者bootstrap.serverskey.serializervalue.serializer 发送消息到Kafka同步发送消息 Kafka生产者——向Kafka写入数据 不管是把Kafka作为消息队列、消息总线还是数据存储平台,总是需要一个可以往Kafka写…

python识别图片中指定颜色的图案并保存为图片

示例代码: def chuli(color):import cv2import numpy as np# 定义颜色名称到HSV阈值范围的映射color_thresholds {red: ([0, 100, 100], [10, 255, 255], [160, 100, 100], [180, 255, 255]),yellow: ([20, 100, 100], [30, 255, 255]),blue: ([90, 100, 100], [1…

golang 环境变量配置

一、GoLand显示环境如下 修改环境变量 新建系统变量 GOROOT: D:\ENSPACE\golandsdk\1.23.1\go1.23.1新建系统变量 GOPATH:工作目录(在下面目录下新建目录:src,项目工程目录都要建在src下如:demo1 demo2) D…

当自动包布机遇上Profinet转ModbusTCP网关,“妙啊”,工业智能“前景无限

在自动化控制技术日新月异的当下,Profinet与ModbusTCP这两种协议在工业通信领域占据着举足轻重的地位。ModbusTCP是基于以太网的串行通信协议,而Profinet则是依托工业以太网的现场总线协议。它们在数据传输速度、实时性表现以及兼容性等方面各具特色。不…