webapi tag sln new net name mvc framework dotnet aspnetcore asp .net .net-core .net-standard

.net - tag - net core templates



.NET Standard vs.NET Core (6)

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

.NET Core es una implementación del estándar .NET que está optimizado para crear aplicaciones de consola, aplicaciones web y servicios en la nube utilizando ASP.NET Core. Su SDK viene con una herramienta poderosa que, además del desarrollo de Visual Studio, admite un flujo de trabajo de desarrollo completo basado en la línea de comandos. 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

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 .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?


¿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).


.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.


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 de 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 cosa dirigida a NetCore10 tiene acceso a INetStandard15 API NetCore10 y API específicas de NetCore10 (como DotNetHostPolicy ).

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

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

Nota: en la analogía original, David Fowler usó 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.


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 diferentes tiempos de ejecución (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. E 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 tiene una pequeña posibilidad de que .NET Framework o Mono para Xamarin usen su código, entonces mejor quédese con .NET Estándar

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 la biblioteca .NET Standard que desea compartir entre tiempos de ejecución, apunte a la versión más baja que pueda , lo que lo ayudará a alcanzar la cantidad máxima de 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. Esta 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.


.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 evoluciona cada marco con las versiones. Eche un vistazo al siguiente diagrama de Microsoft Docs .

Targeting .NET Standard aumenta el soporte de su plataforma, mientras que apuntar a una plataforma .NET particular como .NET Core (o .NET Framework) le permitirá usar todas las funciones de la plataforma para esa plataforma.