C# 桌面端程序跨平台折腾

weiai 发布于 15 天前 367 次阅读


AI智能摘要
公司因需兼容uos、麒麟等国产操作系统,面临C#桌面程序跨平台挑战。.NET 10引入Avalonia支持Linux但仍存问题,且国产系统多基于Debian 10或更低版本,gtk无法满足Avalonia WebView组件要求。年初公司已重构软件,采用freesql支持国产数据库、改用Path.Combine处理路径、移除winform依赖(仅保留含WebView2的窗体)。最终转向electron框架,利用现有VUE技术栈,由electron启动服务端程序处理逻辑并返回界面,实现跨平台兼容。
— 此摘要由AI分析文章内容生成,仅供参考。

今年下半年奇奇怪怪的,公司突然接到了很多跨平台的需求。同时我们公司的产品,在相关文件中要求必须对uos、麒麟,等一系列国产操作系统进行兼容。

这就很尴尬了,众所周知 C# 并不支持跨端的桌面程序。即便在今年 .net 10 引入了Avalonia 对linux 的支持。但是仍然有很多的问题。

幸好我们公司年初的时候已经对软件进行了一波重构,替换了很多不支持跨端的类库。

比如:

  1. 引入了freesql 来支持国产的数据库
  2. 将原本程序中使用 “+” 号拼接路径的行为,修改为了 Path.Combine
  3. 移除对winform的依赖,目前winform 就是一个窗体,塞了一个 WebView2(此处是因为程序有服务端运行需求,界面重构为了web)

但是对国产操作系统进行折腾,还是有些问题,最主要的还是:现有的国产系统通常是因为基于debian10 甚至更低,所以gtk达不到 Avalonia WebView 组件的要求。如下图所示

这就形成了一个很尴尬的情况,我们软件所有的基础都是基于C# 的,如果此时转向c++ 和QT 这就太困难了。

在无可奈何时,我想到了一个东西,即“electron”。

我们都知道“electron” 是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 ChromiumNode.js 到 二进制的 程序中,同时electron 是一个成熟的跨平台框架。

这事情瞬间开朗起来了,公司目前的技术栈,前端正好是VUE,让前端老哥改改程序,兼容 electron也未尝不可。

那么最终的解决方案敲定下来了,即:

采用 electron 实现二进制程序 ,在程序启动的时候同时启动我们的服务端程序,后端程序实现一切的逻辑,同时启动一个http服务器。可以理解为electron就是浏览器,界面上呢实际上还是由服务端程序返回给electron的。

USDT图标 若您喜欢这篇内容,欢迎用TRC-USDT支持创作者

TN3pU88pu1bkUgpyBuJCG1riZecFFkpe8E

请选择TRC20协议转账,感谢您的支持 ❤️

扫描二维码转账

TRC-USDT地址二维码