Compartir vía


Introducción al uso compartido de código

En este documento se comparan los distintos métodos para compartir código entre proyectos multiplataforma: .NET Standard, proyectos compartidos y bibliotecas de clases portables, incluidas las ventajas y desventajas de cada uno.

Hay tres métodos para compartir código entre aplicaciones multiplataforma:

  • Bibliotecas de .NET Standard: los proyectos de .NET Standard pueden implementar código para compartirse entre varias plataformas y pueden acceder a un gran número de API de .NET (según la versión). .NET Standard 1.0 a 1.6 implementa conjuntos de API progresivamente más grandes, mientras que .NET Standard 2.0 proporciona la mejor cobertura de la BCL de .NET (incluidas las API de .NET disponibles en aplicaciones de Xamarin).
  • Proyectos compartidos: use el tipo de proyecto de recurso compartido para organizar el código fuente y use las directivas #if del compilador según sea necesario para administrar los requisitos específicos de la plataforma.
  • Bibliotecas de clases portables (en desuso): las bibliotecas de clases portables (PCL) pueden tener como destino varias plataformas con una superficie de API común y usar interfaces para proporcionar funcionalidad específica según la plataforma. Las PCL están en desuso en las versiones más recientes de Visual Studio: use .NET Standard en su lugar.

El objetivo de una estrategia de uso compartido de código es admitir la arquitectura que se muestra en este diagrama, donde varias plataformas pueden usar un único código base.

Shared code application architecture

En este artículo se comparan los métodos disponibles para ayudarle a elegir el tipo de proyecto adecuado para las aplicaciones.

Bibliotecas de .NET Standard

Las bibliotecas de .NET Standard proporcionan un conjunto bien definido de las bibliotecas de clases base a las que se puede hacer referencia en diferentes tipos de proyecto, incluidos proyectos multiplataforma como Xamarin.Android y Xamarin.iOS. Se recomienda .NET Standard 2.0 para lograr la máxima compatibilidad con el código de .NET Framework existente.

.NET Standard diagram

Ventajas

  • Permite compartir código entre varios proyectos.
  • Las operaciones de refactorización siempre actualizan todas las referencias afectadas.
  • Hay disponible un área expuesta mayor de la biblioteca de clases base (BCL) de .NET que con los perfiles de PCL. En concreto, .NET Standard 2.0 tiene casi la misma superficie de API que .NET Framework y se recomienda para las nuevas aplicaciones y para migrar las PCL existentes.

Inconvenientes

  • No se pueden usar directivas del compilador como #if __IOS__.

Comentarios

.NET Standard es similar a PCL, pero con un modelo más sencillo para la compatibilidad con la plataforma y un mayor número de clases de la BCL.

Proyectos compartidos

Los proyectos compartidos contienen archivos de código y recursos que se incluyen en cualquier proyecto que haga referencia a ellos. Los proyectos compartidos no generan resultados compilados por sí mismos.

En esta captura de pantalla se muestra un archivo de solución que contiene tres proyectos de aplicación (para Android, iOS y Windows), con un proyecto compartido que contiene archivos de código fuente comunes de C#:

Shared project solution

La arquitectura conceptual se muestra en el diagrama siguiente, donde cada proyecto incluye todos los archivos de código fuente compartidos:

Shared project diagram

Ejemplo

Una aplicación multiplataforma que admita iOS, Android y Windows requeriría un proyecto de aplicación para cada plataforma. El código común reside en el proyecto compartido.

Una solución de ejemplo debería contener las siguientes carpetas y proyectos (los nombres de proyecto se han elegido por motivos de claridad, los proyectos no tienen que seguir estas directrices de nomenclatura):

  • Shared: proyecto compartido que contiene el código común a todos los proyectos.
  • AppAndroid: proyecto de la aplicación de Xamarin.Android.
  • AppiOS: proyecto de la aplicación de Xamarin.iOS.
  • AppWindows: proyecto de la aplicación de Windows.

De este modo, los tres proyectos de aplicación comparten el mismo código fuente (los archivos de C# en Shared). Las modificaciones en el código compartido se compartirán en los tres proyectos.

Ventajas

  • Permite compartir código entre varios proyectos.
  • El código compartido se puede bifurcar según la plataforma mediante directivas del compilador (por ejemplo, mediante #if __ANDROID__, como se describe en el documento Creación de aplicaciones multiplataforma).
  • Los proyectos de aplicación pueden incluir referencias específicas de la plataforma que el código compartido puede usar (por ejemplo, usar Community.CsharpSqlite.WP7 en el ejemplo Tasky de Windows Phone).

Inconvenientes

  • Las refactorizaciones que afectan al código dentro de las directivas del compilador "inactivas" no actualizarán el código dentro de esas directivas.
  • A diferencia de la mayoría de los demás tipos de proyecto, un proyecto compartido no tiene ningún ensamblado de "salida". Durante la compilación, los archivos se tratan como parte del proyecto de referencia y se compilan en ese ensamblado. Si desea compartir el código como ensamblado, las bibliotecas de clases portables o .NET Standard son una mejor solución.

Comentarios

Una buena solución para los desarrolladores de aplicaciones que escriben código que solo está pensado para compartir en su aplicación (y no para distribuir a otros desarrolladores).

Bibliotecas de clases portables

Sugerencia

Se recomiendan las bibliotecas de .NET Standard 2.0 con preferencia sobre las bibliotecas de clases portables.

Las bibliotecas de clases portables se describen en detalle aquí.

Portable class library diagram

Ventajas

  • Permite compartir código entre varios proyectos.
  • Las operaciones de refactorización siempre actualizan todas las referencias afectadas.

Inconvenientes

  • En desuso en las versiones más recientes de Visual Studio, se recomienda usar las bibliotecas de .NET Standard en su lugar. Consulte esta explicación de las diferencias entre PCL y .NET Standard.
  • No se pueden usar directivas del compilador.
  • Solo hay disponible un subconjunto de .NET Framework para su uso, determinado por el perfil seleccionado (consulte Introducción a PCL para más información).

Comentarios

La plantilla de PCL se considera en desuso en las versiones más recientes de Visual Studio.

Resumen

La estrategia de uso compartido del código que elija se controlará en las plataformas que usa como destino. Elija el método que funcione mejor para el proyecto.

.NET Standard es la mejor opción para compilar bibliotecas de código que se pueden compartir (especialmente las que se publican en NuGet). Los proyectos compartidos funcionan bien para los desarrolladores de aplicaciones que planean usar una gran cantidad de funcionalidades específicas de una plataforma en sus aplicaciones multiplataforma.

Aunque los proyectos de PCL siguen siendo compatibles con Visual Studio, se recomienda .NET Standard para nuevos proyectos.