以C#或其他基于.NET的语言(例如Visual Basic(VB))可以使用多种UI技术构建跨平台应用程序。本文研究了三种技术,并讨论了在哪些情况下开发人员可以使用这些技术。本文使您对C#中可用于构建前端应用程序的技术有一个基本的了解,并将回答诸如哪些平台可用的问题。 可以在浏览器中运行吗?它会具有原生的外观和感觉吗?另外,可以将其部署到应用商店吗?
.NET Framework是一项在2000年代初期创建的技术,主要用于Windows桌面应用程序。当时主要的两种语言是C#和VB。这些语言可编译为通用中间语言 (CIL-以前称为Microsoft中间语言MSIL)。当时,.NET的主要竞争对手是 Java。它与.NET相似,但从一开始就是为跨平台兼容性而设计的。Java包括跨平台的UI框架Swing。.NET发布后不久, Mono平台于2004年发布。此框架允许将库编译为CIL并在Linux等平台上运行。但是,UI技术(例如 Windows窗体)在.NET上构建的版本无法在其他平台上运行,因为它们依赖Windows操作系统的本机组件。Mono平台不断发展,开发人员为每个平台创建了多个UI组件,但是没有一个跨平台UI组件成为事实上的标准。Microsoft不会将任何UI技术都推向所有平台。
自.NET成立以来,情况发生了很大变化。现在,人们每天至少使用五种主要操作系统:Windows(台式机/平板电脑),OSX(台式机),Android(电话/平板电脑),iOS(电话/平板电脑),Linux(主要是台式机)。还有许多其他平台来驱动诸如手表之类的设备和诸如Tizen之类的电视组件。随着App Store的出现,应用程序的部署机制也在迅速改变。现在,在手机上部署应用程序的标准方法是通过各种应用程序商店,人们开始期望他们的手机和平板电脑能够运行与台式机相同的应用程序。
现在,在应用程序开发部署中,安全性是一个重要的考虑因素。台式机落后于手机,因为许多应用程序仍然需要用户以安装程序的形式下载该应用程序,然后手动进行安装。这是一个巨大的问题,任何忽略此问题的开发人员都将承担后果。如果用户被迫从互联网下载应用程序,那么他们就会遭受恶意软件的攻击。他们失去了对应用程序级别权限的控制,并向计算机打开间谍软件的权限。没有权限审查该软件。随着用户变得越来越精明,越来越少的人开始容忍这种情况,并选择通过App Store或在浏览器中部署应用程序。
关键是这样的:
您需要安全地部署应用程序,并且需要在尽可能多的平台上进行部署。
Xamarin 是一家公司,其工程师创建了Mono平台以在许多平台上运行CIL。Xamarin在2016年被微软收购。他们仍然维护Mono平台,该平台允许C#代码在iOS,Android和其他平台上运行。开发人员经常使用Xamarin作为Mono的同义词,但是Xamarin还是一套CIL库,可在非Windows平台上驱动应用程序。
.NET Core是类似于 .NET Framework的现代桌面运行时环境。它可以在OSX,Linux和Windows等操作系统上运行。自成立以来,开发人员在Mono平台之上构建了多个UI框架,因此构建跨平台运行的前端应用程序的能力已成为现实。其中一些UI框架也可以在Mono上运行。这意味着现在有可能构建跨平台相似性完美的像素的应用程序。
开发人员不能忽略 Web Assembly(Wasm)。它是一种内置于浏览器中的新兴技术,并得到W3C的支持。这项技术从本质上允许开发人员编译可以在浏览器中运行的代码,而这些代码可以像JavaScript一样安全地运行。最重要的是,它是独立于语言的“基于堆栈的虚拟机的二进制指令格式”。C#编译为这种指令格式,因此为C#开发人员打开了UI功能的新世界。C#代码可以以Silverlight 类似的方式在浏览器中运行。
XAML在这里也需要提及。XAML是一种标记语言,用于在大多数基于C#的UI框架中以声明方式定义UI。这里提到的三个平台都支持XAML。XAML对C#就像HTML对JavaScript。但是,XAML比HTML更进一步,因为它不仅包括CSS之类的样式,而且还具有非常强大的数据绑定功能。
以下是基于这些运行时的UI技术。
Uno Platform是基于XAML的开源UI库和平台,可在iOS,Android和Web Assembly上运行。它呈现给本机控件,但尝试在非Windows 10平台上模拟Windows UWP图形库。它具有现代的Windows 10外观,并且可以使用XAML样式轻松自定义。
“通用Windows平台桥,允许基于UWP的代码在iOS,Android和WebAssembly上运行”。
https://github.com/nventive/Uno
平台: iOS,Android,WebAssembly,Windows(作为UWP)
App Store: Apple Store,Google Play,Microsoft Store(使用UWP编译时)
渲染类型:本机。控件的行为与在本地平台上一样。但是,默认情况下,控件的样式类似于Windows 10应用程序,并且接近完美像素。可以更改样式,使其看起来更像本机平台。
Xamarin.Forms是基于XAML的开源工具包,支持Android,iOS,Windows UWP,开箱即用的预览OSX,并且将来可能会支持Linux。它是一种手机驱动的UI技术,但通过将声明性XAML呈现给本机UI组件,弥合了手机,平板电脑和台式机之间的鸿沟。
Xamarin.Forms为.NET开发人员提供了完整的跨平台UI工具包。在Visual Studio中使用C#构建完全本机的Android,iOS和通用Windows平台应用程序。
https://docs.microsoft.com/zh-cn/xamarin/xamarin-forms/
平台: iOS,Android,Tizen,Windows(作为UWP)。其他平台正在 预览中。
App Store: Apple Store,Google Play,Microsoft Store
渲染类型:本机。专为iOS构建的应用在外观和行为上均类似于iOS应用。Android应用的外观和行为类似于Android应用。
Avalonia是基于XAML的开源UI库和平台,可在Windows,Linux和OSX上运行。社区基于Windows WPF UI框架。因此,它主要针对台式机使用,可能不太适合移动应用程序。
我们支持Windows,Linux和OSX,并提供针对Android和iOS的实验性移动支持。
http://avaloniaui.net/
平台: Windows,Linux和OSX,以及对iOS和Android的实验性支持。该技术主要基于 .NET Core。
应用商店:未知。将来可能会通过App Store发行Avalonia应用。但是,目前尚无明确的文档或执行此操作的途径。
渲染类型:像素完美。该平台控制渲染,并且不依赖本机组件进行渲染。
如果是这样,Uno Platform可能是这里的明显赢家。这是唯一从头开始支持Wasm的平台。从头开始构建具有浏览器支持的应用程序是一个明智的选择,因为它可以确保最大程度的渗透。用户不必从App Store下载应用程序即可使用您的应用程序,但可以免受恶意软件的侵害。
注意:Xamarin.Forms和Uno Platform可以一起使用。
如果是这样,Xamarin.Forms可能是正确的选择。像Uno平台一样,Xamarin.Forms允许在各个平台之间声明性地定义UI,但基于本机平台呈现UI。因此,不会因不以特定于平台的方式运行的控件而使用户感到震惊。默认情况下,样式近似于平台的本机外观,而Uno Platform看起来更像Windows10。但是,Xamarin.Forms和Uno Platform都允许为其本机平台进行样式设置。
Xamarin.Forms当前已获得Microsoft的全面支持,因此可以保证在不久的将来会获得支持。但是,Uno平台是一个令人印象深刻的平台,无疑是Xamarin.Forms的值得竞争者。如果要构建本机应用程序,则需要同时试用Uno Platform和Xamarin.Forms,以了解最适合您的项目的方法。
从某种意义上讲,这是一个反问。如前所述,您不应期望用户在商店或浏览器之外下载应用。但是,在某些合理的情况下,您的用户可能会喜欢具有 .NET Core运行时所有功能的,在Linux,Windows和OSX上都是像素完美的自定义适合桌面的体验。在这种情况下,Avalonia是您最好的选择。
作为一个UI库,Avalonia不应该被低估。任何WPF开发人员都熟悉它,并且非常容易运行和直接使用。强大的 .NET Core平台使其成为一个令人信服的选择。