Electron 是使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序的一个框架, Electron.NET 是.net 下对 Electron 的封装实现, 通过它可以比较容易地实现对 Electron 的调用,达成快速开发跨平台桌面应用程序的目标。

参考《入门干货之Electron的.NET实现-Electron.NET》可以很快搭建起一个跨平台的 Electron 桌面应用程序, Windows 下打包 win 平台的版本没有什么大问题,但是打包 linux 平台下的版本,会碰到一个 https://service.electron.build 服务异常的问题(fq也没用),结果就是 electron 需要的包文件下不回来,官方似乎懒得解决这个问题,直白地说了——既然是免费的午餐,吃不成也别抱怨——想打 Linux 的包不妨切换到 Linux 环境下好了。于是...

1.Ubuntu 18.04  下安装

参考MSDN上的一篇文档 完成 nodejs 的安装,使用以下命令安装 cURL(用于在命令行中从 Internet 下载内容的工具):

$sudo apt-get install curl

使用以下命令安装 nvm:

$curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

验证安装,请输入:

$command -v nvm

此命令应返回“nvm”,如果你收到“找不到命令”或根本没有响应,请关闭当前终端,将其重新打开,然后重试。

列出当前安装的 Node 版本(此时应为无):

$nvm ls

安装 Node.js 的最新稳定 LTS 版本(推荐):

$nvm install --lts

验证 Node.js 是否已安装,以及是否为当前默认版本:

$node -v

全局安装 electron

$npm install -g electron 

验证 electron

$electron -v

安装打包工具,没安装这个之前, electronize build 可能会在下载文件的过程中发生 can not rename file 的错误

$npm install -g electron-builder
$npm install -g electron-packager

安装工具 .net 工具

dotnet tool install ElectronNET.CLI -g

记得设置路径

export PATH="$HOME/.dotnet/tools:$PATH"

2. 编译打包

进入工程目录

$electronize init
$electronize build /target linux /p:PublishReadyToRun=false /p:PublishSingleFile=true

第一次运行 electronize build 在打包时会检测 cache 中是否有需要的 electron 包,如果没有的话会从 github 上拉去,在国内网络环境中拉取的过程大概率会失败,所以你可以自己去下载一个包放到 ~/.cache 目录里,这个过程可能需要fq, 如遇下载失败别灰心,多尝试几次……

不出错的话,可以看到打包完成的程序文件 bin\Desktop\*.AppImage,如果自己要打 rpm 包,也可以在下级目录 linux-unpacked\ 找到所有文件及依赖库。

3. WSL(CentOS7) 安装补遗

相比起在 Windows 下开发完,再扔到虚拟机或者专门的 Linux 主机上进行打包,能利用 Windows 自带的 WSL 实现 Linux 环境下的打包工作会方便很多,WSL(CentOS7)下安装过程与 Ubuntu 下大同小异。

#yum install curl
#curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
#nvm install --lts

CentOS root 账号执行 npm install 指令会报错 npm install Error: EACCES: permission denied, mkdir node_modules/gifsicle/ ,解决方法是增加命令参数

#npm install -g electron --unsafe-perm=true --allow-root

然后验证 electron -v 时可能还会遇到以下错误:

1) 运行报错 找不到 libatk.1.0.so.0, /usr/lib 下即使存在这个文件也没有用, 因为 electron 依赖的是 /usr/lib64/libatk1.0.so.0,解决方法:

#yum install atk

2) 运行报错 找不到 libatk-bridge-2.0.so.0

#yum install at-spi2-atk

3) 运行报错 找不到 libgdk_pixbuf-2.0.so.0

#yum install gdk-pixbuf2

4) 运行报错 找不到 libgtk-3.so.0

#yum install gtk3

5) 运行报错 Running as root without --no-sandbox is not supported

#electron -v --no-sandbox

4 Electron.NET + Blazor 遇到的小坑

4.1 Blazor Server 启动端口问题

electron 启动后台的 asp.net core 程序时,appsettings.json 里面配置的端口是不起作用的。看源码如果没有特殊指定,Electron 会从 8000 端口开始找第一个可用的端口给后台程序启用监听,这在 CreateWindowAsync 传 Url 的时候让我犯了难,查文档发现可以在 electron.manifest.json 中增加

"aspCoreBackendPort": 固定端口, 

的方式来解决。后来发现更简单的方法是使用 ElectronNET.API.BridgeSettings.WebPort 来动态获取后台服务的端口,这在《入门干货...》那篇文章里提到过,可惜我读书不仔细,绕了圈子。

4.2 如何在 vs2019 中调试

在 vs2019 中默认的运行项目不会启动 Electron,命令行中通过 electronize start 启动的话又需要附加进程来命中断点进行调试,如何在 vs2019 中启动 Electron 的同时也能调试呢——在调试中选 Electron.NET App

4.3 Blazor Server Bootstrap 样式异常

默认的 Blazor Server 程序使用的是 BootStrap 的样式,Windows 下打包发布的 electron 程序在 Windows 下运行显示一切正常,但是到了 Ubuntu 下打包出来的程序,样式显示就异常了,最明显的是左侧的菜单列显示不出来了。我不太会搞前端,看不出个中缘由,但是发现 Electron 访问 vs2019 生成的 release\publish 下的后台程序显示是正常的,于是尝试把 linux-unpack\resources\bin 下的文件替换成 publish  下的版本,然后再运行 electron 主程序,这回显示正常了。谨慎怀疑是否 electron-builder 打包的时候漏了什么,不过 Linux 下打包使用 Ant Design Blazor 组件开发的 Blazor Server 程序显示是正常的。

4.4 electronize start 出错 (2021-9-17 更新)

如果遇到这个错误,建议检查一下引用 Electron.Net项目的名字,就是 *.csproj 的 *,如果名字里面有字符点,例如 XXX.YYY,把中间的 “.” 去掉。

另外 Blazor Server 的项目最好也不要在名字中间有点,因为如果有的话,对应的 Shared/MainLayout.razor.css 有可能不能正常生成,运行起来 XXX.YYY.styles.css 这个资源找不到(404),缺省 的 BootStrap 的样式就丢了。

Electron.Net + Linux + Blazor 初尝备忘录的更多相关文章

  1. 初尝 Perl

    本文将阐述以下几方面内容: 1.什么是Perl 2.Perl有什么用 3.Windows 下的Perl环境搭建 4.Perl 版Hello World 5.Perl 语法梗概 6.一些参考资料 什么是 ...

  2. 初尝Windows 下批处理编程

    本文叫“ 初尝Windows 下批处理编程”是为了延续上一篇“初尝 Perl”,其实对于博主而言批处理以及批处理编程早就接触过了. 本文包括以下内容 1.什么是批处理 2.常用批处理命令 3.简介批处 ...

  3. seajs初尝 加载jquery返回null解决学习日志含示例下载

    原文地址:http://www.tuicool.com/articles/bmuaEb 如需demo示例,请点击下方链接下载: http://yunpan.cn/cVEybKs8nV7CF  提取码 ...

  4. .NET领域驱动设计—初尝(三:穿过迷雾走向光明)

    开篇介绍 在开始这篇富有某种奇妙感觉的文章之旅时我们先短暂的讨论一下关于软件开发方法论的简要: 纵观软件开发方法论,从瀑布模型.螺旋模型.RUP(统一软件开发过程).XP(极限编程).Agile(敏捷 ...

  5. 第三次随笔--安装虚拟机及学习linux系统初体验

    第三次随笔--安装虚拟机及学习linux系统初体验 ·学习基于VirtualBox虚拟机安装Ubuntu图文教程在自己笔记本上安装Linux操作系统 首先按照老师的提示步骤进行VirtualBox虚拟 ...

  6. 20155226-虚拟机与Linux之初体验

    虚拟机与Linux之初体验 虚拟机的安装 虚拟机对我来说不是很了解,但今天在安装过程中加深了我的理解.虚拟机是一个在原来系统基础上进行的又一个系统安装,可以在不影响前者的情况下完成一些其不能解决的问题 ...

  7. 初尝微信小程序2-Swiper组件、导航栏标题配置

    swiper 滑块视图容器. 很多网页的首页都会有一个滚动的图片模块,比如天猫超市首页,滚动着很多优惠活动的图片,用来介绍优惠内容,以及供用户点击快速跳转到相应页面. Swiper不仅可以滚动图片,也 ...

  8. [转]Windows10内置Linux子系统初体验

    Windows10内置Linux子系统初体验 https://www.jianshu.com/p/bc38ed12da1d

  9. linux常用命令大全(linux基础命令+命令备忘录+面试复习)

    linux常用命令大全(linux基础命令+命令备忘录+面试复习)-----https://www.cnblogs.com/caozy/p/9261224.html

  10. 分布式设计《初尝memcached》

          之前听说过高性能的分布式缓存开源工具,但一直没有真正接触过,如今接触的产品中实用到过分布式缓存.所以决定一探到底.memcached是一个优秀的开源的分布式缓存工具.也是眼下比較火热的分布 ...

随机推荐

  1. 搭建lnmp环境-php(第二步)

    系统环境:centos7 php7.4 编译安装太繁琐,这里用yum安装即可 ===========yum形式安装======== # 安装EPEL源(nginx那里已安装了,跳过) yum inst ...

  2. windows上传ipa到开发者中心(app store)的方法

    假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开发者中心才能在构建版本里选择构建版本上架 ...

  3. 基于动态数据源的SAAS系统(SpringBoot+MybaitsPlus+Durid)

    一.什么是SAAS系统 SAAS全称 Software as a Service,软件即服务.本人接触SAAS也在近两年:在我的理解,SAAS不是特指某种系统,它是提供某类产品的系统服务平台,让第三方 ...

  4. LinuxUDP通讯

    目录 前言 一.UDP通讯 1.UDP通讯概述 2.UDP的特点 3.UDP的应用 二.UDP基本通讯 1.socket函数 2.bind函数 2.1 主机字节序和网络字节序 2.2 点分制十进制转换 ...

  5. 【Mybatis】08 ResultMap、Association、分步查询、懒加载

    ResultMap自定义结果集 可以把查询返回的结果集封装成复杂的JavaBean对象 原来的ResultType属性,只能把查询到的结果集转换为简单的JavaBean 什么是简单的JavaBean对 ...

  6. 【RabbitMQ】13 消息补偿 & 幂等保障

    https://www.bilibili.com/video/BV15k4y1k7Ep?p=34 我靠,幂等保障就是乐观锁控制啊 https://www.bilibili.com/video/BV15 ...

  7. 【Java】API SecureRandom 安全随机

    之前学习的Random工具类只是一个伪随机数类... @Test public void secureRandom() throws Exception { // 个不可预测的安全的随机数 // 无法 ...

  8. 【托普斯的力场】—— ARPG游戏《艾尔登法环》中的人物:托普斯

    地址: https://youtube.com/shorts/oSIbOQ_r4fA?si=F-knFwjZ3iPXqPeS https://www.bilibili.com/video/BV1fV4 ...

  9. python3.6—opencv-python报错:Exception: Not found: 'python/cv2/py.typed'

    报错: self).run_setup(setup_script=setup_script) File "/tmp/pip-build-env-zsqslesq/overlay/lib/py ...

  10. 优秀架构设计与web文档

    架构风格与基于网络的软件架构设计 https://docs.huihoo.com/rest/REST_cn.pdf rfc https://tools.ietf.org/html/rfc2616