以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或在瀏覽器中部署應用程式。
關鍵是這樣的:
您需要安全地部署應用程式,並且需要在儘可能多的平臺上進行部署。
現代執行時:Mono/Xamarin,.NET Core,Web Assembly
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.FormsXamarin.Forms
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
Avalonia
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應用。但是,目前尚無明確的文件或執行此操作的途徑。
渲染型別:畫素完美。該平臺控制渲染,並且不依賴本機元件進行渲染。
如何選擇v您需要瀏覽器支援嗎?如果是這樣,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,以了解最適合您的專案的方法。
您是否將桌上型電腦與下載App Store之外的應用程式的使用者定位在一起?從某種意義上講,這是一個反問。如前所述,您不應期望使用者在商店或瀏覽器之外下載應用。但是,在某些合理的情況下,您的使用者可能會喜歡具有 .NET Core執行時所有功能的,在Linux,Windows和OSX上都是畫素完美的自定義適合桌面的體驗。在這種情況下,Avalonia是您最好的選擇。
作為一個UI庫,Avalonia不應該被低估。任何WPF開發人員都熟悉它,並且非常容易執行和直接使用。強大的 .NET Core平臺使其成為一個令人信服的選擇。