c# - example - Estándar.NET,.Net Core, PCL
sqlite-net-pcl example (4)
Creo que este recurso responde la mayoría de sus preguntas:
https://docs.microsoft.com/en-us/dotnet/articles/standard/library
La .NET Standard Library es una especificación formal de las API .NET que están destinadas a estar disponibles en todos los tiempos de ejecución de .NET. La motivación detrás de la Biblioteca Estándar es establecer una mayor uniformidad en el ecosistema .NET.
Entonces, según lo entiendo, los otros tipos de bibliotecas son específicos de la plataforma y el estándar .NET es independiente de la plataforma hasta cierto punto.
Si desea que su código esté disponible en diferentes plataformas, el estándar .NET parece ideal, pero preste mucha atención a la versión del estándar .NET compatible con las otras plataformas (consulte la tabla en el enlace).
Espero que esto ayude
Estoy completamente desconcertado por toda esta charla sobre .Net Standard. En cierto sentido, la idea de una biblioteca .NET estándar suena genial. Noté que en la galería NuGet, puedes elegir .NET Standard para muchas plataformas (por ejemplo, Silverlight). Pero eso me saca de quicio. Es .NET estándar una biblioteca? O un formato DLL?
De todos modos, ahora hay proyectos .NET Core, así como los proyectos antiguos de PCL, pero no veo ninguna plantilla de Visual Studio para .NET Standard. Aunque encontré que, si accede a la configuración del proyecto, puede cambiar una biblioteca PCL existente a .NET estándar.
De todos modos, la pregunta básica que estoy preguntando es a qué tipo de biblioteca deberíamos dirigirnos. Principalmente estoy haciendo esto para proyectos de Xamarin, pero sería genial si pudiéramos compartir estas bibliotecas con otras plataformas, especialmente .NET Core y UWP.
Pero, estoy realmente confundido sobre por qué Microsoft ha sacado dos tipos de biblioteca aparentemente idénticos al mismo tiempo: .NET Core y .NET Standard.
EDITAR: ahora estoy mucho menos confundido acerca de esto. He editado la publicación original porque todavía no he respondido completamente mi propia pregunta. Esto es lo que creo que es la clave para entender estas cosas. Estoy abierto a las correcciones aquí.
Definiciones
NET Core : un entorno de tiempo de ejecución basado en .NET que se ajusta a la definición de la API estándar de .NET.
PCL : un formato de biblioteca basado en .NET compatible con varios entornos de tiempo de ejecución, incluidos .NET, Mono, Windows Phone, etc.
.NET Standard (Definition 1) - Un conjunto de definiciones de API estándar para entornos de tiempo de ejecución basados en .NET
Estándar .NET (Definición 2) : un formato de biblioteca basado en .NET compatible con varios entornos de ejecución, incluidos .NET, Mono, Windows Phone, etc., que es una continuación del formato PCL. En Visual Studio, una biblioteca PCL se puede convertir a una biblioteca estándar .NET yendo a las propiedades del proyecto y editando el marco objetivo.
Estándar es para segmentar un conjunto específico de API similar a las versiones de API de Android. La biblioteca nuget es solo un meta paquete que contiene todas las bibliotecas que confirman el estándar.
Scott Hunter en el show de MSDEV ha explicado este concepto muy bien. Vale la pena echarle un vistazo - http://msdevshow.com/2016/07/dot-net-core-with-scott-hunter/
Esto de Samuel Englard ( https://github.com/dotnet/corefx/issues/973#issuecomment-249582799 ):
Las DLL .NET están formateadas de acuerdo con ECMA-335 (mejor conocida como Common Language Infrastructure). Este formato es verdadero en todas las plataformas que llamamos .NET; Full Framework, Core, Xamarin, Mono, Silverlight, etc.
La razón por la que no se podía usar una DLL compilada en una plataforma con otra era que el formato no especificaba las API (generalmente hablando). Entonces, si bien todos podían leer la DLL, se encontrarían con problemas de clase XYZ en el espacio de nombres ABC en una plataforma y en el espacio de nombre DEF en otra, si es que existía.
PCL "resolvió" esto haciendo dos cosas:
Usaron el reenvío de tipos de modo que, aunque usted escribió su código esperando la clase XYZ en el espacio de nombres ABC, podría encontrarse en plataformas que lo tenían en otra parte. Limitaba las API que podía usar con el conjunto común más bajo compartido por todas las plataformas que deseaba.
Tomar una PCL y convertirla a un proyecto .NET Standard no es una recompilación debido al formato de salida, sino a los metadatos incluidos (particularmente el reenvío de tipos).
Entonces, creo que esencialmente las bibliotecas .NET Standard no son diferentes a las bibliotecas PCL, excepto por el hecho de que ponen una capa sobre la parte superior de un conjunto estándar diferente de API, y esas API pueden implementar diferentes punteros (reenvío de tipos).
.NET Core es, por supuesto, un entorno de tiempo de ejecución, pero creo que está alineado muy de cerca con .NET Standard. No creo que tenga ninguna relación especial aparte del hecho de que implementa las API .NET Standard.
Por favor, consulte este glosario: https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/glossary.md
Los documentos en torno a esto son realmente confusos, pero se puede entender aproximadamente así:
PCL: bibliotecas que se dirigen a un conjunto de plataformas (tienen el ''mínimo denominador común'' de las API de esas plataformas). Así que cuando escribo una PCL me estás diciendo que quiero apuntar a la plataforma A, B, C
Estándar .NET: un conjunto ''estándar'' de API en lugar de una plataforma. Básicamente, no le importan las plataformas, solo el estándar (versión 1.3, 1.6 ...) y su código funcionará en todas las plataformas que lo admitan.
- .NET core no debe confundirse aquí, es ''otra versión'' del framework .NET. El estándar .NET funcionará en tiempo de ejecución cruzada (.NET framework, .NET core, Mono)
Así que supongo que el estándar .NET es el camino a seguir :)