构建跨平台应用程序的的几种UI技术,以C# 或者其他基于.NET的 语言(诸如:Visual Basic[VB])。本文研究了三种跨平台技术,并讨论了在哪些情况下开发人员可以使用这些技术。本文使你对可以用于C#中构建前端应用程序的技术有一个基本了解,并将回答诸如哪些平台可用的问题。那它可以在浏览器中运行吗?它会具有原生的外观和感受吗?另外,可以将其部署到应用商店吗?

背景

.NET Framework是一项于2000年代初创建的技术,主要用于Windows桌面应用程序。当时主要的两种语言是C#VB。这些语言币可以编译为通用中间语言(CIL - 以前成为微软中间语言``MSIL)。当时.NET的主要竞争对手是Java。它与.NET相似,但从一开始就是为了跨平台兼容性而设计的,Java包括跨平台的UI框架SWing.NET发布后不久,Mono平台于2004年发布。此框架允许将库编译为CLI并在Linux等平台上运行。但是,基于.NETWindows窗口之类的UI技术无法再其他平台上运行,因为它们依赖Windows操作系统的本机组件。Mono平台不断发展,开发人员为每个平台创建了多个UI组件,但是没有一个跨平台UI`组件成为事实上的标准。微软没有推出将任何UI技术作为所有平台的答案。

现代生态系统

自.NET成立以来,情况发生了很大变化。现在,人们每天至少使用五种主要操作系统:Windows(台式机/平板电脑),OSX(台式机),Android(电话/平板电脑),iOS(电话/平板电脑),Linux(主要是台式机)。还有许多其他平台来驱动诸如手表之类的设备和诸如Tizen之类的电视组件。随着应用商店的出现,应用程序的部署机制也在迅速改变。现在,应用程序部署到手机的标准方法时使用各种应用商店,人们开始期望他们的手机和平板电脑能够运行与台式机相同的应用程序。

在应用程序开发部署中,安全性现在是一个重要的考虑因素。台式机落后于手机,因为许多应用程序仍然需要用户以安装程序的形式下载该应用程序,然后手动进行安装。这是一个巨大的问题,任何忽略此问题的开发人员都将自担风险。如果用户被迫从互联网上下载应用程序,那么他们就会遭受恶意软件的攻击。他们失去了对应用程序级别权限的控制,并向间谍软件开放计算机权限,而没有权限审查该软件。随着用户变得越来越精明,越来越少的人开始容忍这种情况,并选择通过应用商店或在浏览器中部署的应用程序。

这里的关键是:

您需要安全地部署应用程序,并且需要在尽可能多的平台上进行部署。

现代运行时:Mono/Xamarin.NET CoreWebAssembly

Xamarin是一家给公司,其工程师创建了Mono平台已在许多平台上运行CILXamarin在2016年被微软收购。他们仍然维护Mono平台,该平台允许C#代码在iOSAndroid和其他平台上运行。开发人员经常使用Xamarin作为Mono的同义词,但是Xamarin还是一套CIL库,可在非Windows平台上驱动应用程序。

.NET Core是类似于.NET Framework的现代桌面运行时环境。它可以在OSXLinuxWindows等操作系统上运行。自.NET Core发布以来,开发人员在Mono平台上构建了多个UI框架,因此构建跨平台运行的前端应用程序的能力已成为现实。其中一些UI框架也可以在Mono上运行。这意味着现在有可能构建跨平台相似性完美的应用程序。

开发人员不能忽视Web Assembly(Wasm)。它是浏览器内置的一项新兴技术,并得到W3C的支持。从本质上讲,这项技术使开发人员能够以与JavaScript一样安全的方式编译可以在浏览器中运行的代码。最重要的是,它是一种独立于语言的“基于堆栈的虚拟机的二进制指令格式”。C#编译为这种指令格式,因此为C#开发人员打开了UI功能的新世界。C#代码可以以类似于Silverlight的方式在浏览器中运行,Silverlight现在已经不在获得支持了。

XAML在这里也需要提及。 XAML是一种标记语言,用于在大多数基于c#UI框架中以声明方式定义UI。这里提到的三个平台都支持XAMLXAMLC#就像HTMLJavaScript。但是,XAMLHTML更进一步,因为它不仅包括CSS之类的样式,而且还具有非常强大的数据绑定功能。

以下是基于这些运行时的UI技术。

Uno Platform

Uno Platform是基于XAML的开源UI库和平台,可在iOSAndroidWeb Assembly上运行。它呈现本机原生控件,但尝试在非Windows 10平台上模拟Windows UWP图形库。它具有现代的Windows 10外观,并可以使用XAML样式轻松自定义样式。

https://github.com/nventive/Uno

平台iOSAndroidWebAssemblyWindows(诸如UWP)。

应用商店:苹果商店,谷歌商店,微软商店(使用UWP编译时)。

渲染类型:本机原生。控件的行为与在本地平台上一样。但是,默认情况下,控件的样式类似于Windows 10应用程序,并且接近完美像素。可以更改样式,使其看起来更像本机平台。

Xamarin.Forms

Xamarin.Forms是基于XAML的开源工具包,支持AndroidiOSWindows UWP,开箱即用的预览OSX,并且将来可能会支持Linux。它是一种手机平台驱动的UI技术,但通过将声明性XAML呈现给本机UI组件,弥合了手机,平板电脑和台式机之间的差距。

Xamarin.Forms.NET开发人员提供了完整的跨平台UI工具包。在Visual Studio中使用C#构建完全本机的AndroidiOS和通用Windows平台应用程序。

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/

平台iOSAndroidTizenWindows(诸如UWP),其他平台正在预览中https://github.com/xamarin/Xamarin.Forms/wiki/Platform-Support

应用商店:苹果商店,谷歌商店,微软商店。

渲染类型:本机原生。专为iOS构建的应用在外观和行为上均类似于iOS应用。Android应用的外观和行为类似于Android应用。

Avalonia

Avalonia是基于XAML的开源UI库和平台,可在WindowsLinuxOSX上运行。社区基于Windows WPF UI框架。因此,它主要针对台式机使用,可能不太适合移动应用程序。

我们支持Windows,Linux和OSX,并为Android和iOS提供了实验性的移动支持。

http://avaloniaui.net/

平台WindowsLinuxOSX,实验性支持iOSAndroid。技术主要是基于.NET Core

应用商店:未知。将来可能会通过应用商店发行Avalonia应用。但是,目前尚无明确的文档或执行此操作的途径。。

渲染类型:像素完美。该平台控制渲染,并且不依赖本机组件进行渲染。

怎么选择

你是否需要浏览器支持?

如果是这样,Uno Platform显然是这里的做好的选择。这是唯一一个完全支持Wasm的平台。从头开始构建具有浏览器支持的应用程序是一个明智的选择,因为它可以确保最大程度的渗透。用户不必从应用商店下载应用程序即可使用您的应用程序,但可以免受恶意软件的侵害。

注意:Xamarin.Forms和Uno Platform可以一起使用。

您需要原生的外观和感觉吗?

如果是这样,Xamarin.Forms可能是正确的选择。像Uno平台一样,Xamarin.Forms允许在各个平台之间以声明方式定义UI,但基于本机平台呈现UI。因此,不要因不以特定于平台的方式运行的控件而使用户感到震惊。默认情况下,样式近似于平台的本机外观,而Uno Platform则更像Windows 10。但是,Xamarin.FormsUno Platform都允许为其本机平台设置样式。

Xamarin.Forms目前已获得微软的全面支持,因此在不久的将来会获得可靠的支持。但是,Uno平台是一个令人印象深刻的平台,无疑是Xamarin.Forms值得竞争的平台。如果要构建本机应用程序,则需要同时试用Uno PlatformXamarin.Forms,以得到最适合您的项目的方法。

用户是否可以在应用商店以外下载应用程序,目标机器为台式机?

从某种意义上讲,这是一个反问。如前所述,您不应该期望用户在商店或浏览器之外下载应用。但是,在某些合理的情况下,您的用户可能会喜欢具有.NET Core运行时的所有功能,并可以在LinuxWindowsOSX上都是像素完美的自定义适合桌面的体验。在这种情况下,Avalonia是您最好的选择。

作为一个UI库,Avalonia不应该被低估。任何WPF开发人员都熟悉它,并且非常容易上手运行和深入研究。强大的平台.NET Core使它成为令人信服的选择。

注意:本文已清晰的表达了观点。另外,这里没有提到其他几种C#技术。它们将在后续文章中进行介绍。

C# 跨平台UI 技术的更多相关文章

  1. Web UI 技术发展历程

    本文内容 纯文本和静态 HTML 页面 服务器端技术 插件技术--ActiveX.Applet 和 Flash Ajax 异步时代和基于 JavaScript 的 UI 技术 RIA--Adobe F ...

  2. Atitit gui界面ui技术发展史与未来趋势

    Atitit gui界面ui技术发展史与未来趋势 1. Gui技术的发展,从像素自绘到native控件体系,再到dsl h51 1.1. 编程语言的发展 从机器语言,汇编语言到本地native语言(c ...

  3. .NET Core/.NET5/.NET6 开源项目汇总9:客户端跨平台UI框架

    系列目录     [已更新最新开发文章,点击查看详细] .NET Core 实现了跨平台,支持在 Windwos.Linux.macOS上开发与部署,但是也仅限于Web应用程序.对于Windows桌面 ...

  4. 造轮子了!NETCore跨平台UI框架,CPF

    CPF(暂时命名)(Cross platform framework),模仿WPF的框架,支持NETCore的跨平台UI框架,暂时不够完善,只用于测试,暂时只支持Windows和Mac.支持数据绑定, ...

  5. 干!垃圾微软!发布我的Netcore跨平台UI框架 CPF

    什么鬼,我的CPF快写好了,你居然也要搞跨平台UI框架?什么Maui? 之前怎么不早说要搞跨平台UI框架呢?看到谷歌搞flutter眼红了?明年年底发布?又搞这种追别人屁股的烂事情. 什么MVU模式? ...

  6. Flutter 1.0 正式版: Google 的跨平台 UI 工具包

    今天我们非常高兴的宣布,Flutter 的 1.0 版本正式发布!Flutter 是 Google 为您打造的 UI 工具包,帮助您通过一套代码同时在 iOS 和 Android 上构建媲美原生体验的 ...

  7. 快速了解Electron:新一代基于Web的跨平台桌面技术

    本文引用了作者“ ConardLi”的<用JS开发跨平台桌面应用,从原理到实践>一文部分内容,原文链接:segmentfault.com/a/1190000019426512,感谢原作者的 ...

  8. 微软跨平台UI框架MAUI真的要来啦

    .NET 6 preview已经上线,是时候为在BUILD 2020上宣布的新.NET Multi-platform App UI(MAUI)做准备了.对于客户端应用程序开发人员来说,这一年.NET有 ...

  9. .NET Core:面向未来的开源跨平台开发技术

    作为一种全新的开源和跨平台的开发平台,.NET Core 历经两年多的开发,终于在于2016年6月27日针对所有主流服务器和桌面操作系统发布 1.0 RTM 版本..NET Core 是一种通用开发平 ...

随机推荐

  1. FPGA之SPI SD卡读操作

    这几天在FPGA调试与SD通信,读SD卡里的图片,之前接触32时没有去研究过SD卡,不太熟悉操作流程,在网上找了很多资料,也看了几个32开发板的资料,但大多数都讲得不是特别清楚,只能瞎操作了一番,在别 ...

  2. repo 导出本地 git tag 给他人

    背景 使用 repo 管理了多个 git 仓库,有时需要将本地仓库的tag同步给其他人,但又不能直接推到远程(例如权限问题). 实际场景举例 本地复现了一个问题,需要让其他人回退到相同环境来排查. 本 ...

  3. @uoj - 164@ 【清华集训2015】V

    目录 @description@ @solution@ @accepted code@ @details@ @description@ Picks博士观察完金星凌日后,设计了一个复杂的电阻器.为了简化 ...

  4. docker中mongdb常用操作

    一.进入 --使用本地命令行查看 docker exec -it mongos bash

  5. conda 管理包

    查看当前环境已经安装的包 conda list 查看指定环境中的安装包 conda list -n python27 在Anaconda 库中搜索包 conda search numpy #模糊搜索 ...

  6. os模块查看系统数据

    >>> import os >>> os.name # 操作系统类型 'posix' 如果是posix,说明系统是Linux.Unix或Mac OS X,如果是nt ...

  7. 1、安装配置Git私有服务器

    安装并配置一个私有的Git服务器吧,这样自己的代码就可以进行版本控制了,当然版本控制的重要性嘛,Please Baidu. 系统环境:64位Win10 Version 1909 安装步骤: 1.下载j ...

  8. Python学习手册(第4版) - 专业程序员的养成完整版PDF免费下载_百度云盘

    Python学习手册(第4版) - 专业程序员的养成完整版PDF免费下载_百度云盘 提取码:g7v1 作者简介 作为全球Python培训界的领军人物,<Python学习手册:第4版>作者M ...

  9. 重学 Java 设计模式:实战责任链模式「模拟618电商大促期间,项目上线流程多级负责人审批场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 场地和场景的重要性 射击

  10. 深入了解C#(TPL)之Parallel.ForEach异步

    前言 最近在做项目过程中使用到了如题并行方法,当时还是有点犹豫不决,因为平常使用不多, 于是借助周末时间稍微深入了下,发现我用错了,故此做一详细记录,希望对也不是很了解的童鞋在看到本文此文后不要再犯和 ...