He leído sobre 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 .NET Standard es para garantizar que un conjunto de API siempre esté disponible, sin importar la plataforma utilizada (siempre que esa plataforma sea compatible con la versión .NET Standard que he elegido). Si no me equivoco, esto significa que puedo crear una biblioteca de clases de .NET Standard y luego usarla 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á destinado al 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.
Entonces, al final, no veo la diferencia. ¿Cuándo debo usar cuál? ¿Cuál es la diferencia entre ellos?
fuente
Respuestas:
Intentaré aclarar más tus dudas y extender la respuesta de Jon Skeet.
.NET Standard es una especificación , por lo que una biblioteca compilada para una versión específica de .NET Standard se puede utilizar 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 esencia 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 comprender esta relación:
Cualquier objetivo
NetCore10
tiene acceso aINetStandard15
API y APINetCore10
específicas (comoDotNetHostPolicy
).Por supuesto esta biblioteca no se puede utilizar en diferentes
INetStandard15
implementaciones (NetCore10
no es convertible aNetFramework462
oMono46
).Si, en cambio, necesidad de acceso sólo a
INetStandard15
las API (y especificación de destino que en lugar de un marco concreto) su biblioteca podrá ser utilizado por cualquier marco que prevé su aplicación (NetCore10
,NetFramework462
, etc.)Nota: en la analogía original, David Fowler utilizaba interfaces para las versiones de .NET Standard y las implementaciones de frameworks. Creo que usar interfaces y clases es, en cambio, más intuitivo y representa mejor la relación entre especificaciones e implementaciones concretas.
fuente
.NET Core es una implementación de .NET Standard. Está disponible en múltiples sistemas operativos, pero eso no es lo mismo: también hay otras implementaciones de .NET Standard.
Por lo tanto, si crea una biblioteca .NET Core, tendrá acceso a las cosas que se implementan en .NET Core, pero que no forman parte de .NET Standard, y su biblioteca no será compatible con otras implementaciones de .NET Standard, como Xamarin, Tizen, full .NET framework de escritorio, etc.
En resumen: para lograr la máxima portabilidad, haga que su biblioteca apunte a .NET Standard.
fuente
INetStandard16
). .NET Core 1.0 y Mono 4.6 se implementanINetStandard16
. No puede convertir .Net Core 1.0 a Mono 4.6 (y viceversa), pero cualquier cosa que useINetStandard16
funcionará en ambos. (créditos a David Fowler )La biblioteca .NET Core Class es básicamente un subconjunto de la biblioteca .NET Framework, que solo contiene menos API. Mantenerse en la biblioteca .NET Core Class hace que sea difícil compartir código entre tiempos de ejecución. Es posible que este código no funcione para un tiempo de ejecución diferente (Mono para Xamarin), porque no tiene la API que necesita. Para resolver esto, existe .NET Standard, que es solo un conjunto de especificaciones que le indica qué API puede usar . El objetivo 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 .NET Core, puede ignorar .NET Standard, pero si hay una pequeña posibilidad de que .NET Framework o Mono para Xamarin use su código, entonces es mejor cumplir con el estándar .NET
También tenga en cuenta que las versiones superiores de .NET Standard contienen más API, pero las versiones inferiores son compatibles con más plataformas. Por lo tanto, si crea una biblioteca .NET Standard que desea compartir entre tiempos de ejecución, apunte a la versión más baja que pueda , lo que le ayuda a llegar a la mayoría de las plataformas. Por ejemplo, si desea ejecutar en .NET Framework 4.5 y .NET Core 1.0, la versión más alta de .NET Standard que puede usar es .NET Standard 1.1. Consulte esta gran tabla de la documentación para obtener más información al respecto.
PD: Además, si desea convertir su biblioteca a .NET Standard, .NET Portability Analyzer podría ayudarlo con eso.
fuente
.NET Standard es una especificación de API de .NET destinada a estar disponible en implementaciones de .NET. Esto permite definir un conjunto uniforme de API BCL para todas las implementaciones de .NET.
.NET Core es una de esas implementaciones de .NET Standard. .NET Framework es otra implementación de .NET Standard.
Imagen del blog .NET
La respuesta de Federicos le brinda una descripción gráfica de cómo cada marco evoluciona con las versiones. Eche un vistazo al siguiente diagrama de Microsoft Docs .
fuente
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
fuente
¿Quiso decir .NET Framework? Porque .NET estándar es implementaciones, como .NET Framework, .NET Core y Xamarin.
Me encanta .NET Core porque podemos alojarlo en Linux (use nginx en mi experiencia). Es diferente de .NET framework, que es el único que puede alojar en IIS. Puede considerar el presupuesto de alojamiento en este caso (porque el servidor de Windows es caro para mí).
En la perspectiva del entorno de desarrollo , .Net core es ligero. Por lo tanto, puede usar VSCode, Sublime, para IDE (no solo visual studio).
fuente
En términos simples, el estándar .NET se usa para escribir proyectos de biblioteca de clases que se compilan en dll. .NET Core se puede usar para desarrollar aplicaciones web reales que se pueden ejecutar en todos los sistemas operativos (Windows, Linux, MacOS). (En .NET Core 3, Microsoft ha proporcionado la funcionalidad para desarrollar aplicaciones de escritorio usando WPF, pero hasta ahora estas aplicaciones no serán multiplataforma y solo se ejecutarán en el sistema de Windows. En el futuro, Microsoft también podría hacerlas multiplataforma) .NET estándar Las bibliotecas / dlls se pueden usar en cualquier aplicación que use .NET (.NET framework, .NET Core), lo que significa que puede usar el estándar .NET con .NET framework y .NET core.
fuente