Estándar. NET vs.NET Básica


He leído acerca de la diferencia entre.NET Standard y. NET Core, pero realmente no sé cuál es la diferencia, o cuándo elegir un proyecto de biblioteca. NET Standard y cuándo elegir un proyecto de biblioteca. NET Core.

He leído que el Estándar.NET es para garantizar que un conjunto de API esté siempre disponible, sin importar la plataforma utilizada (siempre y cuando esa plataforma sea compatible con la versión Estándar. NET que he elegido). Si no me equivoco, esto significa que puedo crear una clase biblioteca de. NET Standard y luego usarlo en cualquier plataforma que sea compatible con la versión de.NET Standard que he elegido.

Con.NET Core, he leído que también está diseñado para uso multiplataforma, por lo que si elijo una biblioteca. NET Core, parece que también puedo usarla en muchas plataformas, al igual que. NET Standard.

Así que al final, no veo la diferencia. ¿Cuándo debo usar cuál? ¿Cuál es la diferencia entre ellos?

Author: TriskalJM, 2017-05-20

6 answers

Voy a tratar de aclarar aún más sus dudas y ampliar Jon Skeet respuesta.

. NET Standard es una especificación , por lo que una biblioteca compilada para una versión específica de. NET Standard puede usarse en diferentes implementaciones de. NET Standard.

Como dije en mi otro comentario, una buena analogía para la relación entre. NET Standard y otras Implementaciones de. NET Standard (. NET Core,. NET Framework, etc.) es esta síntesis de David Fowler : Las versiones de. NET Standard son Interfaces, mientras que los frameworks son implementaciones de esas interfaces.

Este diagrama simplificado puede ayudar a entender esta relación:

Analogía de Interfaces Estándar de RED

Cualquier cosa que tenga como objetivo NetCore10 tiene acceso a INetStandard15 API y NetCore10 api específicas (como DotNetHostPolicy).

Por supuesto, esta biblioteca no se puede usar en diferentes implementaciones INetStandard15 (NetCore10 no es convertible a NetFramework462 o Mono46).

Si, en cambio, solo necesita acceso a las API INetStandard15 (y apunte esa especificación en lugar de un marco concreto) su biblioteca puede ser utilizada por cualquier marco que lo implemente (NetCore10, NetFramework462, etc.)

Nota: en la analogía original, David Fowler usó interfaces tanto para las versiones estándar de.NET como para las implementaciones de frameworks. Creo que el uso de interfaces y clases es, en cambio, más intuitivo y representa mejor la relación entre las especificaciones y las implementaciones concretas.

 144
Author: Federico Dipuma,
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
2017-09-15 22:16:34

. NET Core es una implementación de. NET Standard. Está disponible en varios sistemas operativos, pero eso no es lo mismo: también hay otras implementaciones de.NET Standard.

Entonces, si crea una biblioteca. NET Core, tendrá acceso a cosas que se implementan en. NET Core, pero no son parte de. NET Standard, y su biblioteca no será compatible con otras implementaciones de. NET Standard, como Xamarin, Tizen, full. NET desktop marco etc.

En resumen: para lograr la máxima portabilidad, haga que su biblioteca target.NET sea estándar.

 146
Author: Jon Skeet,
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
2017-05-20 11:41:26

. NET Core Class library es básicamente un subconjunto de. NET Framework library, que solo contiene menos API. Adherirse a la biblioteca de clases.NET Core hace difícil compartir código entre tiempos de ejecución. Es posible que este código no funcione para diferentes tiempos de ejecución (Mono para Xamarin), porque no tiene la API que necesita. Para resolver esto está . NET Standard, que es solo un conjunto de especificaciones que le indica qué API puede usar. El propósito principal de. NET Standard es compartir código entre tiempos de ejecución. Y es importante que esta especificación sea implementada por todos los tiempos de ejecución. (. NET Framework, . NET Core y Mono para Xamarin).

Entonces, si está seguro de que usará su biblioteca solo para proyectos de. NET Core, puede ignorar. NET Standard, pero si tiene una mínima posibilidad de que su código sea utilizado por. NET Framework o Mono para Xamarin, entonces es mejor que se adhiera a. NET Standard

También tenga en cuenta que la versión superior de.NET Standard contiene más API, pero la versión inferior es compatible con más plataformas. Por lo tanto, si crea una biblioteca estándar de.NET que desea compartir entre tiempos de ejecución, diríjase a la versión más baja que pueda, lo que le ayudará a alcanzar cantidades máximas de plataformas. Por ejemplo, si desea ejecutar en. NET Framework 4.5 y. NET Core 1.0, la versión estándar de.NET más alta que puede usar es. NET Standard 1.1. This this great table from documentation for more info about it.

PD: También si desea convertir su biblioteca al estándar. NET, Portabilidad. NET El analizador podría ayudarte con eso.

 3
Author: user2771704,
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
2017-08-22 12:18:36

. NET Standard es una especificación de API que todas las implementaciones de.NET deben proporcionar. Aporta consistencia a la familia. NET y le permite crear bibliotecas que puede usar desde cualquier. NET aplicación. Reemplaza PCLs para construir componentes compartidos.

. NET Core es una implementación del estándar. NET que está optimizada para crear aplicaciones de consola, aplicaciones web y nube servicios que utilizan ASP.NET Core. Su SDK viene con una poderosa herramienta que además del desarrollo de Visual Studio soporta un comando completo flujo de trabajo de desarrollo basado en línea. Puede obtener más información sobre ellos en aka.ms/netstandardfaq y aka.ms/netcore.


Lo anterior, junto con una explicación muy clara de la mayoría de las cosas discutidas en esta pregunta, se puede encontrar en el siguiente artículo extremadamente útil de Microsoft (MSDN-Septiembre de 2017): . NET Standard-Desmitificando. NET Core y. NET Standard

 2
Author: steliosalex,
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
2017-10-05 00:17:23

¿Se refería a. NET Framework? Porque. NET standard es una implementación, como. NET Framework,. NET Core y Xamarin.

Me encanta.NET Core porque podemos alojarlo en Linux (usar nginx en mi experiencia). Es diferente a. NET framework, que es que solo se puede alojar en IIS. Puede considerar sobre el presupuesto de alojamiento en este caso (Porque Windows Server es caro para mí).

En la perspectiva del entorno de desarrollo ,. Net core es ligero. Por lo tanto, puede utilizar VSCode, Sublime, para IDE (no solo visual studio).

 0
Author: Fityan Aula,
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
2018-02-17 02:39:29

. NET Core no tiene ningún framework GUI. Windows Forms y WPFs están limitados a las plataformas Microsoft Windows.

Si desea o necesita aplicaciones GUI multiplataforma, entonces necesita una GUI GTK. Esto se ejecuta en Linux y Windows. Puedes hacer esto usando MonoDevelop. La única diferencia hoy en día a este viejo enfoque es, que no son versiones detrás.

 -7
Author: alpham8,
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
2017-05-24 06:53:40