¿Qué es ".NET Core"?

323

Recientemente, en un blog oficial de .NET Framework , se anunció que .NET Core se está convirtiendo en código abierto .

Irónicamente, el autor menciona que lo que es .NET Core se explicará en la próxima publicación. Algunos detalles más se mencionan en otra publicación de anuncio .

De un diagrama suministrado:

Diagrama de .NET Core

y el texto de los artículos en sí, supongo que .NET Core (además de cosas obvias como ser de código abierto) es una reimplementación modular de .NET completo. Es decir, los componentes del marco se cargan según sea necesario, al igual que los paquetes NuGet se cargan ahora. Y ahora ASP.NET 5 es uno de los módulos que ya está implementado. ¿Es correcto mi entendimiento de .NET Core? Tal vez me estoy perdiendo algo?


Encontré un artículo reciente que encontré breve y muy bueno. Cubre .NET Standard, .NET Core y .NET Framework y su relación. Lo recomiendo altamente.

Petr Abdulin
fuente
55
Hay una nueva publicación de blog aquí sobre blogs.msdn.com/b/dotnet/archive/2014/12/04/… pero aún es difícil entender ese diagrama. ¿Significa que WPF y WinForms no pueden usar .NET Core, por ejemplo?
dodgy_coder
@dodgy_coder Creo que, eventualmente, es solo que Store Apps y ASP.NET 5 son los primeros en usar una nueva arquitectura de marco.
Petr Abdulin
1
@dodgy_coder, tiene razón. A partir de ahora, las aplicaciones WPF y WinForms no son portables a .net core. Se pueden volver a desarrollar en aplicaciones universales de Windows. Vea esto: blogs.msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core
VivekDev

Respuestas:

154

Desde el blog .NET Anunciando .NET 2015 Preview: Una nueva era para .NET :

.NET Core tiene dos componentes principales. Incluye un pequeño tiempo de ejecución que se crea a partir de la misma base de código que .NET Framework CLR. El tiempo de ejecución de .NET Core incluye el mismo GC y JIT (RyuJIT), pero no incluye características como dominios de aplicación o seguridad de acceso al código. El tiempo de ejecución se entrega a través de NuGet, como parte del paquete [ASP.NET Core].

.NET Core también incluye las bibliotecas de clases base. Estas bibliotecas son en gran parte el mismo código que las bibliotecas de clases de .NET Framework, pero se han factorizado (eliminación de dependencias) para permitirnos enviar un conjunto más pequeño de bibliotecas. Estas bibliotecas se envían como Sistema. * Paquetes NuGet en NuGet.org.

Y:

[ASP.NET Core] es la primera carga de trabajo que ha adoptado .NET Core. [ASP.NET Core] se ejecuta en .NET Framework y .NET Core. Un valor clave de [ASP.NET Core] es que puede ejecutarse en múltiples versiones de [.NET Core] en la misma máquina. El sitio web A y el sitio web B pueden ejecutarse en dos versiones diferentes de .NET Core en la misma máquina, o pueden usar la misma versión.

En resumen: primero, estaba Microsoft .NET Framework , que consiste en un tiempo de ejecución que ejecuta el código de la aplicación y la biblioteca, y una biblioteca de clases estándar casi completamente documentada .

El tiempo de ejecución es Common Language Runtime , que implementa Common Language Infrastructure , funciona con el compilador JIT para ejecutar el código de bytes CIL (anteriormente MSIL) .

La especificación e implementación de .NET de Microsoft fueron, dada su historia y propósito, muy centradas en Windows e IIS y "gordas". Existen variaciones con menos bibliotecas, espacios de nombres y tipos , pero pocas de ellas fueron útiles para el desarrollo web o de escritorio o son problemáticas de portar desde un punto de vista legal .

Entonces, para proporcionar una versión de .NET que no sea de Microsoft, que podría ejecutarse en máquinas que no sean de Windows, se tuvo que desarrollar una alternativa. No solo se debe portar el tiempo de ejecución para eso, sino también toda la biblioteca de clases de Framework para que sea bien adoptada. Además de eso, para ser completamente independiente de Microsoft, se requerirá un compilador para los idiomas más utilizados.

Mono es una de las pocas, si no la única implementación alternativa del tiempo de ejecución , que se ejecuta en varios sistemas operativos además de Windows, casi todos los espacios de nombres de la biblioteca de clases de Framework a partir de .NET 4.5 y un compilador VB y C # .

Ingrese a .NET Core: una implementación de código abierto del tiempo de ejecución y una biblioteca de clase base mínima. Toda la funcionalidad adicional se entrega a través de paquetes NuGet, implementando el tiempo de ejecución específico, las bibliotecas de framework y los paquetes de terceros con la aplicación misma.

ASP.NET Core es una nueva versión de MVC y WebAPI, junto con una fina abstracción de servidor HTTP, que se ejecuta en el tiempo de ejecución de .NET Core, pero también en .NET Framework.

CodeCaster
fuente
44
¡Ah, así es como me lo perdí! ¡En realidad estaba debajo en la línea de tiempo del blog! Es una pena ..
Petr Abdulin
17
Es todo bastante nuevo y apenas descrito, creo que hiciste una buena pregunta. :)
CodeCaster
3
Pensándolo bien, parece que no es la "próxima publicación", ya que la descripción sigue siendo bastante breve.
Petr Abdulin
2
¿No es esto básicamente lo que vNext nos estaba trayendo?
ps2goat
3
Lo hemos estado haciendo desde que comenzaron a publicar el marco a través de nuget. No hay necesidad de la solución en esa publicación.
ps2goat
84

Es un subconjunto de .NET Framework, iniciado con la edición Compact Framework. Progresó en Silverlight, Windows Store y Windows Phone. Se centró en mantener la implementación pequeña, adecuada para descargas rápidas y dispositivos con capacidades de almacenamiento limitadas. Y es más fácil de mencionar en plataformas que no son de Windows, y seguramente esta fue la razón por la que se eligió como la edición de código abierto. Se omiten las partes "difíciles" y "caras" del CLR y las bibliotecas de clase base.

De lo contrario, siempre es fácil reconocer cuándo se dirige a una versión de marco de este tipo, porque faltarán muchas cosas. Utilizará un conjunto distinto de conjuntos de referencia que solo exponen lo que admite el tiempo de ejecución. Se almacena en su máquina en el C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCoredirectorio.


Actualización: después del lanzamiento de .NET Core 2.0, he visto algunos números representativos que dan una idea decente. Han estado trabajando arduamente en el back-port de API de framework a .NET Core en los últimos dos años. .NET Core 1.0 originalmente admitía 13,000 API. .NET Core 2.0 agregó 20,000 API, elevando el total a 32,000 y permitiendo portar alrededor del 70% de los paquetes NuGet existentes. Hay un conjunto de API que están demasiado conectadas a Windows para ser fáciles de portar a Linux y MacOS. Cubierto por el paquete de compatibilidad de Windows recientemente lanzado, agrega otras 20,000 API.

Hans Passant
fuente
44
De la publicación del blog, no diría cómo se ve esta otra versión de marco 'compacta'. Se anuncia la .NET Coreversión 5.0, que es más alta que el último marco completo. Supongo que con eso quieren decir que es algo diferente.
Petr Abdulin
55
Acabo de describir la historia de la versión .NETCore. Nada nuevo bajo el sol, ha existido durante mucho tiempo. Los cambios en 5.0 son incrementales, el nuevo jitter RyuJIT x64 es el único en el que puedo pensar en este momento. Solo el cambio de licencia es realmente nuevo :)
Hans Passant
3
Tengo tu punto. Aunque todavía creo que anunciar el subconjunto de marcos como la próxima era de .NET es un poco audaz.
Petr Abdulin
50

Encontré un artículo reciente que encontré breve y muy bueno. Cubre .NET Standard, .NET Core y .NET Framework y su relación. Lo recomiendo altamente. Desafortunadamente, no tengo tiempo para adaptarme y ponerlo aquí.

Contenido original de la respuesta a continuación:


Entonces, según la última entrada oficial sobre el tema, aquí hay algunos puntos clave tal como los veo:

.NET Core es esencialmente una bifurcación de .NET Framework cuya implementación también está optimizada en torno a las preocupaciones de factoring.

Pensamos que .NET Core no es específico de .NET Native ni de ASP.NET 5: el BCL y los tiempos de ejecución son de uso general y están diseñados para ser modulares. Como tal, forma la base para todas las futuras verticales .NET.

Así que .NET Native y ASP.NET 5 son solo "sujetos" de prueba para la nueva configuración del marco, en parte esto quizás porque son bastante diferentes:

Ingrese la descripción de la imagen aquí

Verán, incluso necesitan un nivel bajo separado, pero una parte importante de BCL sigue siendo común:

Pensamos que .NET Core no es específico de .NET Native ni de ASP.NET 5: el BCL y los tiempos de ejecución son de uso general y están diseñados para ser modulares. Como tal, forma la base para todas las futuras verticales .NET.

Es decir, los rectángulos magenta en la parte superior se agregarán masivamente con los nuevos modelos de aplicación, pero la base seguirá siendo común.

Despliegue de NuGet:

A diferencia de .NET Framework, la plataforma .NET Core se entregará como un conjunto de paquetes NuGet. Nos hemos decidido por NuGet porque allí es donde está la mayoría del ecosistema de la biblioteca.

Relación con los marcos actuales:

Para Visual Studio 2015, nuestro objetivo es asegurarnos de que .NET Core sea un subconjunto puro de .NET Framework. En otras palabras, no habría vacíos en las características. Después del lanzamiento de Visual Studio 2015, esperamos que .NET Core se versione más rápido que .NET Framework. Esto significa que habrá momentos en el tiempo en que una característica solo estará disponible en las plataformas basadas en .NET Core.

Resumen:

La plataforma .NET Core es una nueva pila .NET que está optimizada para el desarrollo de código abierto y la entrega ágil en NuGet. Estamos trabajando con la comunidad Mono para que sea excelente en Windows, Linux y Mac, y Microsoft lo admitirá en las tres plataformas.

Conservamos los valores que .NET Framework aporta al desarrollo de clase empresarial. Ofreceremos distribuciones de .NET Core que representan un conjunto de paquetes NuGet que probamos y respaldamos juntos. Visual Studio sigue siendo su ventanilla única para el desarrollo. El consumo de paquetes NuGet que forman parte de una distribución no requiere una conexión a Internet.

Básicamente, esto puede pensarse como un .NET 4.6 con un modelo de distribución modificado, que, simultáneamente, está en proceso de convertirse en código abierto.

Petr Abdulin
fuente
22

La documentación actual tiene una buena explicación de qué es .NET Core, qué áreas usar, etc. Las siguientes características definen mejor .NET Core:

Implementación flexible : puede incluirse en su aplicación o instalarse lado a lado en todo el usuario o máquina.

Multiplataforma : se ejecuta en Windows, macOS y Linux; se puede portar a otros sistemas operativos. Los sistemas operativos (SO), las CPU y los escenarios de aplicaciones compatibles crecerán con el tiempo, proporcionados por Microsoft, otras compañías e individuos.

Herramientas de línea de comandos : todos los escenarios de productos se pueden ejercer en la línea de comandos.

Compatible : .NET Core es compatible con .NET Framework, Xamarin y Mono, a través de .NET Standard Library.

Código abierto : la plataforma .NET Core es de código abierto y utiliza licencias MIT y Apache 2. La documentación tiene licencia bajo CC-BY. .NET Core es un proyecto de .NET Foundation.

Compatible con Microsoft : .NET Core es compatible con Microsoft, según .NET Core Support

Y esto es lo que incluye .NET Core:

Un tiempo de ejecución .NET, que proporciona un sistema de tipos, carga de ensamblaje, un recolector de basura, interoperabilidad nativa y otros servicios básicos.

Un conjunto de bibliotecas marco, que proporcionan tipos de datos primitivos, tipos de composición de aplicaciones y utilidades fundamentales.

Un conjunto de herramientas SDK y compiladores de idiomas que permiten la experiencia básica del desarrollador, disponible en .NET Core SDK.

El host de la aplicación 'dotnet', que se utiliza para iniciar aplicaciones .NET Core. Selecciona el tiempo de ejecución y aloja el tiempo de ejecución, proporciona una política de carga de ensamblaje y lanza la aplicación. El mismo host también se usa para lanzar herramientas SDK de la misma manera.

Conjunto
fuente
19

.NET Core es una nueva implementación multiplataforma de estándares .NET (ECMA 335) similar a Mono pero realizada por el propio Microsoft.

Ver docs.microsoft.com

farfareast
fuente
18

Microsoft reconoció el futuro paradigma de código abierto web y decidió abrir .NET a otros sistemas operativos. .NET Core es un .NET Framework para Mac y Linux. Es un .NET Framework "ligero", por lo que faltan algunas características / bibliotecas.

En Windows, seguiría ejecutando .NET Framework y Visual Studio 2015. .NET Core es más amigable con el mundo de código abierto como Node.js , npm, Yeoman , Docker , etc.

Puede desarrollar sitios web completos y API RESTful en Mac o Linux con Visual Studio Code + .NET Core que antes no era posible. Entonces, si te encanta Mac o Ubuntu y eres un desarrollador de .NET, adelante, configúralo.

Para Mono vs. .NET Core, Mono fue desarrollado como .NET Framework para Linux que ahora es adquirido por Microsoft (compañía llamada Xamarin ) y utilizado en el desarrollo móvil. Eventualmente, Microsoft puede fusionar / migrar Mono a .NET Core. No me preocuparía por Mono en este momento.

Manish Jain
fuente
12

Intenté crear un nuevo proyecto en Visual Studio 2017 hoy (actualizado recientemente desde Visual Studio 2015) y noté un nuevo conjunto de opciones para el tipo de proyecto. ¡O son nuevos o ha pasado un tiempo desde que comencé un nuevo proyecto! :)

Captura de pantalla de Visual Studio

Encontré este enlace de documentación y lo encontré muy útil, así que lo estoy compartiendo. Los detalles de las viñetas también se proporcionan en el artículo. Solo estoy publicando viñetas aquí:

Debe usar .NET Core para su aplicación de servidor cuando:

You have cross-platform needs.
You are targeting microservices.
You are using Docker containers.
You need high performance and scalable systems.
You need side by side of .NET versions by application.

Debe usar .NET Framework para su aplicación de servidor cuando:

Your application currently uses .NET Framework (recommendation is to extend instead of migrating)
You need to use third-party .NET libraries or NuGet packages not available for .NET Core.
You need to use .NET technologies that are not available for .NET Core.
You need to use a platform that doesnt support .NET Core.

Este enlace proporciona un glosario de términos .NET.

joym8
fuente
11

Desde el sitio web de Microsoft :

.NET Core se refiere a varias tecnologías que incluyen .NET Core, ASP.NET Core y Entity Framework Core.

Estas tecnologías son diferentes de .NET nativas en que se ejecutan utilizando CoreCLR runtime (utilizado en la Plataforma universal de Windows ).

Como mencionó en su pregunta, .NET Core no solo es de código abierto, sino también portátil [se ejecuta en MacOS, Windows y Linux]

Los componentes internos de .NET Core también están optimizados para no usar módulos diferentes de su biblioteca principal a menos que la aplicación lo requiera.

Salah Alshaal
fuente
44
".NET Core se refiere a varias tecnologías, incluido .NET Core" ... cosas geniales
Kieren Johnstone
3

Microsoft acaba de anunciar .NET Core v 3.0, que es una versión muy mejorada de .NET Core.

Para obtener más detalles, visite este excelente artículo: Diferencia entre .NET Framework y .NET Core desde abril de 2019.

itsikha
fuente
3
Se desaconsejan encarecidamente las respuestas de solo enlace y principalmente las respuestas basadas en opiniones . Consulte meta.stackexchange.com/a/8259
pitido doble
Entendido, edité la parte de opinión ... gracias por hacérmelo saber.
itsikha
1
¿Mejorado de qué manera? ¿Puede proporcionar un resumen de lo que cree que son los cambios y adiciones más importantes?
Peter Mortensen
3

.NET Core es un marco de software informático administrado gratuito y de código abierto para los sistemas operativos Windows, Linux y macOS. Es un sucesor multiplataforma de código abierto para .NET Framework.

Las aplicaciones .NET Core son compatibles con Windows, Linux y macOS. En pocas palabras .NET Core es similar a .NET Framework, pero es multiplataforma, es decir, permite que las aplicaciones .NET se ejecuten en Windows, Linux y MacOS. Las aplicaciones de .NET Framework solo pueden ejecutarse en el sistema Windows. Entonces, la diferencia básica entre .NET framework y .NET core es que .NET Core es multiplataforma y .NET framework solo se ejecuta en Windows.

Además, .NET Core tiene una inyección de dependencia incorporada de Microsoft y no tiene que usar software / archivos DLL de terceros para la inyección de dependencia.

Waleed Naveed
fuente
1
¿Puedes dar más detalles sobre la inyección de dependencia? ¿Qué significa eso realmente en este contexto? ¿Te refieres a marcos particulares? ¿Tienes algunas referencias / enlaces?
Peter Mortensen
1

.NET Core es una versión de código abierto y multiplataforma de .NET. Los productos de Microsoft, además de las grandes capacidades que tienen, siempre fueron caros para los usuarios habituales, especialmente para los usuarios finales de productos que han sido fabricados por tecnologías .NET.

La mayoría de los clientes de bajo nivel prefieren usar Linux como su sistema operativo y antes de .NET Core no les gustaría usar las tecnologías de Microsoft, a pesar de sus grandes capacidades. Pero después de la producción de .NET Core, este problema se resuelve por completo y podemos satisfacer a nuestros clientes sin considerar su sistema operativo, etc.

sajadre
fuente
No se resuelve por completo. Te resultará difícil usar una aplicación Windows Forms o WPF en Linux.
Peter Mortensen
0

.NET Core es una versión de código abierto y multiplataforma de .NET Framework.

JEuvin
fuente