.NET Standard@Xamarin.Forms
2017-09-24

编者语 : .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中添加

     

[html] view plain copy print?
  1. <span style="font-size:14px;">  <PropertyGroup></span>  
  2. <span style="font-size:14px;">    <TargetFramework>netstandard1.4</TargetFramework></span>  
  3. <span style="font-size:14px;">    <PackageTargetFallback>$(PackageTargetFallback);portable-win+net45+wp8+win81+wpa8</PackageTargetFallback></span>  
  4. <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