. NET Estándar,. Net Core, PCL


Estoy completamente desconcertado por toda esta charla sobre.Net Standard. En cierto sentido, la idea de una biblioteca. NET estándar suena genial. Me di cuenta de que en la galería de NuGet, se puede elegir.NET Estándar para muchas plataformas (por ejemplo, Silverlight). Pero eso me confunde. ¿Es. NET standard una biblioteca? ¿O un formato DLL?

De todos modos, ahora hay proyectos.NET Core, así como los antiguos proyectos PCL, pero no veo ninguna plantilla de Visual Studio para. NET Standard. Aunque, encontré que si vaya a la configuración del proyecto, puede cambiar una biblioteca PCL existente a.NET Standard.

De todos modos, la pregunta básica que estoy haciendo 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 en cuanto a por qué Microsoft han sacado dos tipos de biblioteca aparentemente idénticos al mismo tiempo: . NET Core, y. NET Estándar.

EDITAR: Ahora estoy mucho menos confundido acerca de esto. He editado el post original porque aún no he respondido completamente a mi propia pregunta. Esto es lo que creo que es la clave para entender estas cosas. Estoy abierto a correcciones.

Definiciones

NET Core - un entorno de ejecución basado en.NET que se ajusta a la definición de la API estándar. NET.

PCL - un formato de biblioteca basado en. NET soportado por 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 ejecución basados en. NET

. NET Standard (Definition 2) - un formato de biblioteca basado en.NET compatible con varios entornos de tiempo 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 en una biblioteca estándar. NET entrando en las propiedades del proyecto y la edición del marco de trabajo de destino.

Author: Melbourne Developer, 2016-08-20

4 answers

Los documentos en torno a esto son ciertamente confusos, pero se puede entender aproximadamente como esto:

  • PCL: bibliotecas que se dirigen a un conjunto de plataformas (tienen el 'mínimo común denominador' de las API de esas plataformas). Así que al escribir un PCL estás diciendo que quiero apuntar a la plataforma A, B, C

  • . NET standard: un conjunto' estándar ' de API en lugar de una plataforma. Así que básicamente no te importan las plataformas, solo el estándar (versión 1.3, 1.6 ...) y su código funcionará en todas las plataformas que lo soportan.

  • . NET core no debe confundirse aquí, es 'otra versión' de. NET framework. . NET standard funcionará en tiempo de ejecución cruzado (. NET framework,. NET core, Mono)

Así que supongo que el estándar. NET es el camino a seguir:)

 25
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-23 02:41:29

Creo que este recurso responde a la mayoría de sus preguntas:

Https://docs.microsoft.com/en-us/dotnet/articles/standard/library

La Biblioteca Estándar de.NET es una especificación formal de las API de. 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.

Por lo que entiendo, los otros tipos de biblioteca son específicos de la plataforma y. NET estándar es plataforma agnóstica 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 que admiten las otras plataformas (consulte la tabla en el enlace).

Espero que esto ayude

 9
Author: hburton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-20 06:35:53

Esto de Samuel Englard ( https://github.com/dotnet/corefx/issues/973#issuecomment-249582799):

. NET DLL están formateados de acuerdo con ECMA-335 (Mejor conocido como el Infraestructura Lingüística Común). Este formato es cierto en todos plataformas que llamamos. NET; Full Framework, Core, Xamarin, Mono, Silverlight, etc.

La razón por la que no pudo usar un DLL compilado contra una plataforma con otro era que el formato no especificaba API (generalmente hablar). Así que mientras todos podían leer el DLL, te encontrarías con problemas de clase XYZ está en el espacio de nombres A. B. C en una plataforma y en el espacio de nombres D. E. F en otro, si es que existió.

PCLs "resolvió" esto haciendo dos cosas:

Usaron el reenvío de tipos para que aunque escribieras tu código esperando la clase XYZ en el espacio de nombres A. B. C, se pudiera encontrar en plataformas que lo tenían en otros lugares. Limitó las API que podría usar al conjunto común más bajo compartido por todos los plataformas que querías.

Tomar un PCL y convertirlo en un proyecto estándar. NET no es un recompile debido al formato de salida pero debido a los metadatos incluido (Tipo de reenvío en particular).

Entonces, creo que esencialmente las bibliotecas estándar.NET no son diferentes a las bibliotecas PCL, excepto por el hecho de que ponen una capa sobre un conjunto estandarizado 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á muy alineado con el estándar.NET. No creo que tenga ninguna relación especial con él, aparte del hecho de que implementa las API estándar de.NET.

Consulte este glosario: https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/glossary.md

 9
Author: Melbourne Developer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-27 00:15:58

El 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 paquete meta que contiene todas las bibliotecas que confirman el estándar.

Scott Hunter en MSDEV show ha explicado este concepto muy bien. Vale la pena comprobarlo - http://msdevshow.com/2016/07/dot-net-core-with-scott-hunter /

 3
Author: lazy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-21 00:58:09