Hace ya tiempo que el framework .NetStandard va cogiendo fuerza, así que yo también me he decidido a actualizar mis proyectos con estas nuevas librerías.
Entendiendo las PCLs
Sin entrar en demasiados detalles, ya sabemos que el mayor problema de una librería PCL es qué es estática en el tiempo para la plataforma que se creó en su origen. Es decir, las definiciones de los perfiles son estáticas e inmutables. De esta forma, si se crea una librería con un perfil determinado, por ejemplo el perfil 111, este contiene .net 45, win8, wpa81.
Estas serán las plataformas que esta nueva PCL va a soportar, no obstante para el desarrollador también significa que la PCL está limitada a las APIs comunes de esas tres plataformas.
Esto nos impide que más adelante podamos dar soporte de nuevas funcionalidades a una plataforma especifica y asegurar el funcionamiento y compatibilidad con las demás. Por eso a veces nos encontramos al instalar un paquete NuGet que nos dice que no hay una versión PCL compatible con nuestro framework.
Por qué usar .NetStandard
Para esto surge .NetStandard. Primero empezaremos por el numero que identifica la versión ya que es algo diferente a lo que estamos acostumbrados hasta ahora en el mundo .net. El numero indica el grupo de plataformas en el que es compatible, tenemos un cuadro muy interesante en la página oficial de Microsoft. Una lectura muy interesante si quieres aprender más. Aquí vamos a resumirlo a la siguientes tablas.
Por plataforma
.NET Standard | 1.0 | 1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 | 2.0 |
---|---|---|---|---|---|---|---|---|
.NET Core | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 2.0 |
.NET Framework (with .NET Core 1.x SDK) | 4.5 | 4.5 | 4.5.1 | 4.6 | 4.6.1 | 4.6.2 | ||
.NET Framework (with .NET Core 2.0 SDK) | 4.5 | 4.5 | 4.5.1 | 4.6 | 4.6.1 | 4.6.1 | 4.6.1 | 4.6.1 |
Mono | 4.6 | 4.6 | 4.6 | 4.6 | 4.6 | 4.6 | 4.6 | 5.4 |
Xamarin.iOS | 10.0 | 10.0 | 10.0 | 10.0 | 10.0 | 10.0 | 10.0 | 10.14 |
Xamarin.Mac | 3.0 | 3.0 | 3.0 | 3.0 | 3.0 | 3.0 | 3.0 | 3.8 |
Xamarin.Android | 7.0 | 7.0 | 7.0 | 7.0 | 7.0 | 7.0 | 7.0 | 8.0 |
Universal Windows Platform | 10.0 | 10.0 | 10.0 | 10.0 | 10.0 | 10.0.16299 | 10.0.16299 | 10.0.16299 |
Windows | 8.0 | 8.0 | 8.1 | |||||
Windows Phone | 8.1 | 8.1 | 8.1 | |||||
Windows Phone Silverlight | 8.0 |
Por framework
PCL Profile | .NET Standard | PCL Platforms |
---|---|---|
Profile7 | 1.1 | .NET Framework 4.5, Windows 8 |
Profile31 | 1.0 | Windows 8.1, Windows Phone Silverlight 8.1 |
Profile32 | 1.2 | Windows 8.1, Windows Phone 8.1 |
Profile44 | 1.2 | .NET Framework 4.5.1, Windows 8.1 |
Profile49 | 1.0 | .NET Framework 4.5, Windows Phone Silverlight 8 |
Profile78 | 1.0 | .NET Framework 4.5, Windows 8, Windows Phone Silverlight 8 |
Profile84 | 1.0 | Windows Phone 8.1, Windows Phone Silverlight 8.1 |
Profile111 | 1.1 | .NET Framework 4.5, Windows 8, Windows Phone 8.1 |
Profile151 | 1.2 | .NET Framework 4.5.1, Windows 8.1, Windows Phone 8.1 |
Profile157 | 1.0 | Windows 8.1, Windows Phone 8.1, Windows Phone Silverlight 8.1 |
Profile259 | 1.0 | .NET Framework 4.5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8 |
Si hay una idea que podamos sacar rápidamente al ver ambas tablas es, «Cuanto menor framework, mejor!»
Cuanto mas bajo es el número de nuestra librería .netStandard, mayor es el número de plataformas con el que es compatible. Pero, también tenemos que entender que también estamos usando un framework más limitado en cuanto a funcionalidades.
Como actualizar en Xamarin
La forma más sencilla de actualizar un proyecto de Xamarin con Visual Studio es la suguiente. Yo lo he hecho con la versión de vs2017 15.6.2.
1- Nos apuntamos las librerías que tenemos referenciadas en nuestra PCL.
2 – Editamos el fichero del proyecto .csproj y borramos todo su contenido (Excepto la linea de definición del xml). Sí al pulsar con el botón derecho sobre el proyecto no te aparece la opción de editar, puede que quieras instalar la extension Productivity Power Tools 2017
3 – Copiamos el siguiente codigo
1 2 3 4 5 6 7 8 |
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <AssetTargetFallback>portable-net45+netcore45+wpa81+wp8+MonoAndroid10+MonoTouch10+Xamarin.iOS10;portable-net45+win8+wp8+wpa81;portable-win+net45+wp80+win81+wpa81</AssetTargetFallback> </PropertyGroup> </Project> |
4 – Añadimos al menos la referencia a Xamarin.Forms pegando el siguiente código después de cerrar PropertyGroup
1 2 3 |
<ItemGroup> <PackageReference Include="Xamarin.Forms" Version="2.5.0.280555" /> </ItemGroup> |
5 – Añadimos el resto de librerías que apuntamos en el primer paso de la forma convencional.
Aquí he puesto la versión 2.0 de .NetStandard por que como hemos visto en la tabla de arriba para nuestro proyecto Xamarin es perfectamente valido en todas sus plataformas. Esta versión nos ofrece mayor compatibilidad con versiones mas nuevas de Xamarin.iOS, Xamarin.Android, Mono, etc.
De está manera nuestro proyecto una vez solucionadas las referencias compilará y ahora está mucho mas preparado para las nuevas actualizaciones.