.NET Standard@Xamarin.Forms
編者語 : .NET技術社群由于微軟的開源和跨平臺性越來越受關注,但國內都是礙于大家以往的認識阻礙了發展,沒有太多大的企業敢于去把.NET作為第一生產力。你作為.NET程序員有義務去保護好你的飯碗,也要改變人對.NET的認知。希望大家一起來推廣.NET
? ? ?? .NET Standard?是什么?我們來回顧下現在.NET的產品線吧,估計讓一群Java客目瞪口呆
? ? ?? .NET現在可以做從服務端到客戶端的所有事情,由于涉及平臺眾多,如果你希望寫一個涉及多個平臺的類庫,在之前的情況下你會碰到不少困難,舉個例子來說,類庫在傳統服務器/WPF/WindowsForms/ASP.NET需要.NET Framwork?的BCL ,.NET Core/UWP則需要Core Library,而Xamarin(iOS,Android)則需要Mono Class Library 。你希望做一個統一標準跨平臺的庫,但經驗告訴你這是一個惡心的事,因為你需要考慮不同平臺相同的API卻有不同的方法,特別是某些平臺缺少調用方法,這是很大的坑。特別是那個經典的UWP真是一陣暈,?基本上差異化太大了。在以往的解決方案,你可以寫一個PCL(Portable Class Library) 。PCL集合了不同平臺的交集,整合不同平臺的API完成類庫的構建,這個時候你需要了解一堆平臺特性,和出現一堆 #if NETCORE ...#elif Xamarin ... #endif 。而.NET Standard?的工作是統一不同平臺的API,寫一次就可以給不同平臺調用,這樣你寫的類庫就可以跨平臺了。
? ? ?? .NET Standard?不斷發展,基于不同版本兼容性也有不同,微軟在文檔中也有說明,你可以基于你所需要的平臺去使用.NET Standard Library的版本。越高的版本有越多的API這個是肯定的,當然微軟也會把一些API進行修正。
? ? ? ?
? ? ???現在的項目需要.NET Standard嗎?這就取決于你的決心了。還有就是一些只有特定平臺才有的方法,你可能還是需要通過PCL去解決,現階段還有很多的庫沒有進行.NET Standard的兼容。而在Xamarin 項目中,個人覺得你需要開始做.NET Standard的準備了。
? ? ???我們來找一個項目來玩玩,首先我們通過Visual Studio 2017 創建一個Xamarin Forms項目
? ? ? ?
? ? ???現在默認情況下,Xamarin Forms的模板還沒有.NET Standard?的類庫創建方式,但我們先把項目創建
? ? ?? 2.?在解決方案中添加一個.NET Standard?項目
? ? ? ?
? ? ???并把App1的PCL中的App.xaml?和 MainPage.xaml拷貝到剛創建的ClassLibrary1中
? ? ? ?
? ? ?? 3.?把App1的PCL刪除并把ClassLibrary1的名字命名為App1,其實這個是把.NET Standard取代PCL的庫操作
? ? ? ?
? ? ???這個時候你在App1添加Xamarin Forms的支持,你需要從Nuget進行添加
? ? ? ?
? ? ?? 你會遇上困難,因為Xamarin Forms的版本不兼容.NET Standard,需要安裝一個prerelease的版本去糾正,所以要去prerelease處打勾
? ? ? ?
? ? ? 添加成功狀態如下
? ? ??
? ? ?? 需要在android,ios,UWP中重新添加一下App1,還有把Xamarin Forms的版本同步成和.NET Standard版本一致,再嘗試編譯。看看,就基本通過了。
? ? ? ?
? ? ?? 疑問:所有的庫都有.NET Standard兼容版本嗎?答案是不是。這個時候就有人會說這是個玩具了,畢竟很多庫還停留在PCL。這個時候你可以通過Nuget添加Microsoft.NETCore.Portable.Compatibility讓項目的.NET Standard兼容PCL 。?這樣你可以考慮.NET Standard了吧 ??這不是未來,這是當下。
? ? ? ?
? ? ?? 我在這里以SQLite.net-PCL為例,這里只是添加了支持,還需要對項目文件進行修改,選擇App1的PCL按鼠標右鍵選編輯App1.csproj
? ? ? ?
? ? ?? 把PropertyGroup中添加
? ? ?
<span?style="font-size:14px;">??<PropertyGroup></span>??
<span?style="font-size:14px;">????<TargetFramework>netstandard1.4</TargetFramework></span>??
<span?style="font-size:14px;">????<PackageTargetFallback>$(PackageTargetFallback);portable-win+net45+wp8+win81+wpa8</PackageTargetFallback></span>??
<span?style="font-size:14px;">??</PropertyGroup></span>??
? ? ?? 之后按保存,再通過Nuget添加SQLite.Net-PCL成功了
? ? ? ?
? ? ?? 嘗試編譯也成功
? ? ? ?
? ? ???爽,.NET Standard?為.NET?跨平臺鋪平了道路,打下了基礎,現在可以把Xamarin項目的類庫換成.NET Standard。
? ? ?? 新的.NET, 新的開始,一起努力
原文地址:http://blog.csdn.net/kinfey/article/details/77005497
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的.NET Standard@Xamarin.Forms的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET Core MVC – F
- 下一篇: IdentityServer4 实现自定