C# 跨平台UI 技术
<p><em>构建跨平台应用程序的的几种<code>UI</code>技术,以<code>C#</code> 或者其他基于<code>.NET</code>的 语言(诸如:<code>Visual Basic</code>)。本文研究了三种跨平台技术,并讨论了在哪些情况下开发人员可以使用这些技术。本文使你对可以用于<code>C#</code>中构建前端应用程序的技术有一个基本了解,并将回答诸如哪些平台可用的问题。那它可以在浏览器中运行吗?它会具有原生的外观和感受吗?另外,可以将其部署到应用商店吗?</em></p><h2 id="背景">背景</h2>
<p><code>.NET Framework</code>是一项于2000年代初创建的技术,主要用于<code>Windows</code>桌面应用程序。当时主要的两种语言是<code>C#</code>和<code>VB</code>。这些语言币可以编译为通用中间语言(<code>CIL</code> - 以前成为微软中间语言``MSIL<code>)。当时</code>.NET<code>的主要竞争对手是</code>Java<code>。它与</code>.NET<code>相似,但从一开始就是为了跨平台兼容性而设计的,</code>Java<code>包括跨平台的</code>UI<code>框架</code>SWing<code>。</code>.NET<code>发布后不久,</code>Mono<code>平台于2004年发布。此框架允许将库编译为</code>CLI<code>并在</code>Linux<code>等平台上运行。但是,基于</code>.NET<code>的</code>Windows<code>窗口之类的</code>UI<code>技术无法再其他平台上运行,因为它们依赖</code>Windows<code>操作系统的本机组件。</code>Mono<code>平台不断发展,开发人员为每个平台创建了多个</code>UI<code>组件,但是没有一个跨平台</code>UI`组件成为事实上的标准。微软没有推出将任何UI技术作为所有平台的答案。</p>
<h2 id="现代生态系统">现代生态系统</h2>
<p>自.NET成立以来,情况发生了很大变化。现在,人们每天至少使用五种主要操作系统:<code>Windows</code>(台式机/平板电脑),<code>OSX</code>(台式机),<code>Android</code>(电话/平板电脑),<code>iOS</code>(电话/平板电脑),<code>Linux</code>(主要是台式机)。还有许多其他平台来驱动诸如手表之类的设备和诸如<code>Tizen</code>之类的电视组件。随着应用商店的出现,应用程序的部署机制也在迅速改变。现在,应用程序部署到手机的标准方法时使用各种应用商店,人们开始期望他们的手机和平板电脑能够运行与台式机相同的应用程序。</p>
<p>在应用程序开发部署中,<strong>安全性现在是一个重要的考虑因素</strong>。台式机落后于手机,因为许多应用程序仍然需要用户以安装程序的形式下载该应用程序,然后手动进行安装。这是一个巨大的问题,任何忽略此问题的开发人员都将自担风险。如果用户被迫从互联网上下载应用程序,那么他们就会遭受恶意软件的攻击。他们失去了对应用程序级别权限的控制,并向间谍软件开放计算机权限,而没有权限审查该软件。随着用户变得越来越精明,越来越少的人开始容忍这种情况,并选择通过应用商店或在浏览器中部署的应用程序。</p>
<p>这里的关键是:<br>
<strong>您需要安全地部署应用程序,并且需要在尽可能多的平台上进行部署。</strong></p>
<h2 id="现代运行时monoxamarinnet-corewebassembly">现代运行时:<code>Mono</code>/<code>Xamarin</code>,<code>.NET Core</code>,<code>WebAssembly</code></h2>
<p><code>Xamarin</code>是一家给公司,其工程师创建了<code>Mono</code>平台已在许多平台上运行<code>CIL</code>。<code>Xamarin</code>在2016年被微软收购。他们仍然维护<code>Mono</code>平台,该平台允许<code>C#</code>代码在<code>iOS</code>,<code>Android</code>和其他平台上运行。开发人员经常使用Xamarin作为Mono的同义词,但是Xamarin还是一套CIL库,可在非Windows平台上驱动应用程序。</p>
<p><code>.NET Core</code>是类似于<code>.NET Framework</code>的现代桌面运行时环境。它可以在<code>OSX</code>,<code>Linux</code>和<code>Windows</code>等操作系统上运行。自<code>.NET Core</code>发布以来,开发人员在<code>Mono</code>平台上构建了多个<code>UI</code>框架,因此构建跨平台运行的前端应用程序的能力已成为现实。其中一些<code>UI</code>框架也可以在<code>Mono</code>上运行。这意味着现在有可能构建跨平台相似性完美的应用程序。</p>
<p>开发人员不能忽视<code>Web Assembly</code>(Wasm)。它是浏览器内置的一项新兴技术,并得到<code>W3C</code>的支持。从本质上讲,这项技术使开发人员能够以与JavaScript一样安全的方式编译可以在浏览器中运行的代码。最重要的是,它是一种独立于语言的“基于堆栈的虚拟机的二进制指令格式”。<code>C#</code>编译为这种指令格式,因此为C#开发人员打开了<code>UI</code>功能的新世界。<code>C#</code>代码可以以类似于<code>Silverlight</code>的方式在浏览器中运行,<code>Silverlight</code>现在已经不在获得支持了。</p>
<p><code>XAML</code>在这里也需要提及。 <code>XAML</code>是一种标记语言,用于在大多数基于<code>c#</code>的<code>UI</code>框架中以声明方式定义<code>UI</code>。这里提到的三个平台都支持<code>XAML</code>。 <code>XAML</code>对<code>C#</code>就像<code>HTML</code>对<code>JavaScript</code>。但是,<code>XAML</code>比<code>HTML</code>更进一步,因为它不仅包括<code>CSS</code>之类的样式,而且还具有非常强大的数据绑定功能。</p>
<p>以下是基于这些运行时的<code>UI</code>技术。</p>
<h4 id="uno-platform"><code>Uno Platform</code></h4>
<p><img src="https://img2020.cnblogs.com/blog/1746998/202007/1746998-20200706205513433-1381554830.png"></p>
<p><code>Uno Platform</code>是基于<code>XAML</code>的开源<code>UI</code>库和平台,可在<code>iOS</code>,<code>Android</code>和<code>Web Assembly</code>上运行。它呈现本机原生控件,但尝试在非<code>Windows 10</code>平台上模拟<code>Windows UWP</code>图形库。它具有现代的<code>Windows 10</code>外观,并可以使用<code>XAML</code>样式轻松自定义样式。</p>
<p>https://github.com/nventive/Uno</p>
<p><strong>平台</strong>:<code>iOS</code>,<code>Android</code>,<code>WebAssembly</code>,<code>Windows</code>(诸如UWP)。<br>
<strong>应用商店</strong>:苹果商店,谷歌商店,微软商店(使用UWP编译时)。</p>
<p><strong>渲染类型</strong>:本机原生。控件的行为与在本地平台上一样。但是,默认情况下,控件的样式类似于Windows 10应用程序,并且接近完美像素。可以更改样式,使其看起来更像本机平台。</p>
<h4 id="xamarinforms"><code>Xamarin.Forms</code></h4>
<p><img src="https://img2020.cnblogs.com/blog/1746998/202007/1746998-20200706210438666-158581087.png"></p>
<p><code>Xamarin.Forms</code>是基于<code>XAML</code>的开源工具包,支持<code>Android</code>,<code>iOS</code>,<code>Windows UWP</code>,开箱即用的预览<code>OSX</code>,并且将来可能会支持<code>Linux</code>。它是一种手机平台驱动的UI技术,但通过将声明性XAML呈现给本机UI组件,弥合了手机,平板电脑和台式机之间的差距。</p>
<p><code>Xamarin.Forms</code>为<code>.NET</code>开发人员提供了完整的跨平台<code>UI</code>工具包。在<code>Visual Studio</code>中使用<code>C#</code>构建完全本机的<code>Android</code>,<code>iOS</code>和通用<code>Windows</code>平台应用程序。</p>
<p>https://docs.microsoft.com/en-us/xamarin/xamarin-forms/</p>
<p><strong>平台</strong>:<code>iOS</code>,<code>Android</code>,<code>Tizen</code>,<code>Windows</code>(诸如UWP),其他平台正在预览中https://github.com/xamarin/Xamarin.Forms/wiki/Platform-Support。<br>
<strong>应用商店</strong>:苹果商店,谷歌商店,微软商店。</p>
<p><strong>渲染类型</strong>:本机原生。专为<code>iOS</code>构建的应用在外观和行为上均类似于<code>iOS</code>应用。<code>Android</code>应用的外观和行为类似于<code>Android</code>应用。</p>
<h4 id="avalonia"><code>Avalonia</code></h4>
<p><img src="https://img2020.cnblogs.com/blog/1746998/202007/1746998-20200706211054043-138974586.jpg"></p>
<p><code>Avalonia</code>是基于<code>XAML</code>的开源<code>UI</code>库和平台,可在<code>Windows</code>,<code>Linux</code>和<code>OSX</code>上运行。社区基于<code>Windows WPF UI</code>框架。因此,它主要针对台式机使用,可能不太适合移动应用程序。</p>
<p>我们支持Windows,Linux和OSX,并为Android和iOS提供了实验性的移动支持。</p>
<p>http://avaloniaui.net/</p>
<p><strong>平台</strong>:<code>Windows</code>,<code>Linux</code>,<code>OSX</code>,实验性支持<code>iOS</code>和<code>Android</code>。技术主要是基于<code>.NET Core</code></p>
<p><strong>应用商店</strong>:未知。将来可能会通过应用商店发行<code>Avalonia</code>应用。但是,目前尚无明确的文档或执行此操作的途径。。</p>
<p><strong>渲染类型</strong>:像素完美。该平台控制渲染,并且不依赖本机组件进行渲染。</p>
<h2 id="怎么选择">怎么选择</h2>
<h4 id="你是否需要浏览器支持">你是否需要浏览器支持?</h4>
<p>如果是这样,<code>Uno Platform</code>显然是这里的做好的选择。这是唯一一个完全支持<code>Wasm</code>的平台。从头开始构建具有浏览器支持的应用程序是一个明智的选择,因为它可以确保最大程度的渗透。用户不必从应用商店下载应用程序即可使用您的应用程序,但可以免受恶意软件的侵害。</p>
<p><em>注意:Xamarin.Forms和Uno Platform可以一起使用。</em></p>
<h4 id="您需要原生的外观和感觉吗">您需要原生的外观和感觉吗?</h4>
<p>如果是这样,<code>Xamarin.Forms</code>可能是正确的选择。像<code>Uno</code>平台一样,<code>Xamarin.Forms</code>允许在各个平台之间以声明方式定义<code>UI</code>,但基于本机平台呈现<code>UI</code>。因此,不要因不以特定于平台的方式运行的控件而使用户感到震惊。默认情况下,样式近似于平台的本机外观,而<code>Uno Platform</code>则更像<code>Windows 10</code>。但是,<code>Xamarin.Forms</code>和<code>Uno Platform</code>都允许为其本机平台设置样式。</p>
<p><code>Xamarin.Forms</code>目前已获得微软的全面支持,因此在不久的将来会获得可靠的支持。但是,<code>Uno</code>平台是一个令人印象深刻的平台,无疑是<code>Xamarin.Forms</code>值得竞争的平台。如果要构建本机应用程序,则需要同时试用<code>Uno Platform</code>和<code>Xamarin.Forms</code>,以得到最适合您的项目的方法。</p>
<h4 id="用户是否可以在应用商店以外下载应用程序目标机器为台式机">用户是否可以在应用商店以外下载应用程序,目标机器为台式机?</h4>
<p>从某种意义上讲,这是一个反问。如前所述,您不应该期望用户在商店或浏览器之外下载应用。但是,在某些合理的情况下,您的用户可能会喜欢具有<code>.NET Core</code>运行时的所有功能,并可以在<code>Linux</code>,<code>Windows</code>和<code>OSX</code>上都是像素完美的自定义适合桌面的体验。在这种情况下,Avalonia是您最好的选择。</p>
<p>作为一个<code>UI</code>库,<code>Avalonia</code>不应该被低估。任何<code>WPF</code>开发人员都熟悉它,并且非常容易上手运行和深入研究。强大的平台<code>.NET Core</code>使它成为令人信服的选择。</p>
<p>注意:本文已清晰的表达了观点。另外,这里没有提到其他几种<code>C#</code>技术。它们将在后续文章中进行介绍。</p>
</div>
<div id="MySignature" role="contentinfo">
<div>作者:芝麻麻雀</div>
<div>出处:https://www.cnblogs.com/sesametech-netcore/</div>
<div>本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。 </div><br><br>
来源:https://www.cnblogs.com/sesametech-dotnet/p/13257454.html
頁:
[1]