¿Qué es ".NET Core"?

336

Recientemente, en un blog oficial de .NET Framework se anunció que .NET Core se convertirá 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 anuncios .

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. ¿Mi comprensión de .NET Core es correcta? ¿Quizás me estoy perdiendo algo?


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

4
  • 5
    Hay una nueva publicación de blog aquí sobre blogs.msdn.com/b/dotnet/archive/2014/12/04/… pero aún es difícil de entender ese diagrama. ¿Significa que WPF y WinForms no pueden usar .NET Core, por ejemplo? 8 de diciembre de 2014 a las 4:33
  • @dodgy_coder Creo que eventualmente lo harán, es solo que Store Apps y ASP.NET 5 son los primeros en usar una nueva arquitectura de marco. 8 de diciembre de 2014 a las 5:11
  • 1
    @dodgy_coder, es correcto. A partir de ahora, las aplicaciones WPF y WinForms no son portátiles para .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 27/02/2016 a las 5:46
  • Muchas buenas respuestas aquí. En mis propias palabras ... "es una reescritura de dot net framework, pero la reescritura es de código abierto y se ejecuta en Linux". Tenga en cuenta que la reescritura no fue del 100% a la vez, ha ido creciendo con el tiempo. También tenga en cuenta que algunas cosas que estaban en dotnetFramework no pueden / no deberían ser transferidas para que puedan ejecutarse en Linux. (A veces hay algunas guerras santas dentro de esa discusión). Dado que C # fue una reescritura de Java, esta es una reescritura de una reescritura ... y las cosas están "muy limpias" en mi humilde opinión ... porque fue capaz de hacer una ruptura limpia de la dependencia de las versiones antiguas. Una vez más, solo algunos de "en mis propias palabras". 13 de abril a las 20:29
160

Del blog .NET Announcing .NET 2015 Preview: A New Era for .NET :

.NET Core has two major components. It includes a small runtime that is built from the same codebase as the .NET Framework CLR. The .NET Core runtime includes the same GC and JIT (RyuJIT), but doesn’t include features like Application Domains or Code Access Security. The runtime is delivered via NuGet, as part of the [ASP.NET Core] package.

.NET Core also includes the base class libraries. These libraries are largely the same code as the .NET Framework class libraries, but have been factored (removal of dependencies) to enable us to ship a smaller set of libraries. These libraries are shipped as System.* NuGet packages on NuGet.org.

Y:

[ASP.NET Core] is the first workload that has adopted .NET Core. [ASP.NET Core] runs on both the .NET Framework and .NET Core. A key value of [ASP.NET Core] is that it can run on multiple versions of [.NET Core] on the same machine. Website A and website B can run on two different versions of .NET Core on the same machine, or they can use the same version.

En resumen: primero, estaba Microsoft .NET Framework , que consiste en un tiempo de ejecución que ejecuta código de aplicación y 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 Microsoft de .NET fueron, dada su historia y propósito, muy centradas en Windows e IIS y "gordas". Hay 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 para portarlas desde un punto de vista legal .

Por lo tanto, para proporcionar una versión de .NET que no sea de Microsoft, que pueda ejecutarse en máquinas que no sean Windows, se tuvo que desarrollar una alternativa. No solo el tiempo de ejecución tiene que ser portado 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 de VB y C # .

Ingrese .NET Core: una implementación de código abierto del tiempo de ejecución y una biblioteca de clases 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 del marco y los paquetes de terceros con la propia aplicación.

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

10
  • 4
    ¡Oh, así es como me lo perdí! ¡En realidad estaba debajo en la línea de tiempo del blog! Es una pena.. 13/11/2014 a las 11:44
  • 17
    Todo es material bastante nuevo y apenas se describe, creo que hiciste una buena pregunta. :) 13/11/2014 a las 11:44
  • 3
    Pensándolo bien, parece que no es la "próxima publicación", ya que la descripción es bastante breve. 13/11/2014 a las 12:22
  • 2
    ¿No es esto básicamente lo que nos traía vNext?
    ps2goat
    14/11/2014 a las 22:46
  • 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
    14/11/2014 a las 23:04
84

Es un subconjunto de .NET Framework, iniciado con la edición Compact Framework. Progresó a 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 abrir 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" de CLR y las bibliotecas de clases 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 ventajas. Utilizará un conjunto distinto de ensamblados de referencia que solo exponen lo que es compatible con 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 brindan una visión decente. Han trabajado arduamente para respaldar las API del marco de trabajo a .NET Core durante los últimos dos años. .NET Core 1.0 originalmente admitía 13.000 API. .NET Core 2.0 agregó 20,000 API, lo que eleva el total a 32,000 y permite que se transfiera aproximadamente el 70% de los paquetes NuGet existentes. Hay un conjunto de API que están demasiado vinculadas a Windows para que sean fáciles de migrar a Linux y MacOS. Cubierto por el paquete de compatibilidad de Windows recientemente lanzado, agrega otras 20,000 API.

3
  • 4
    De la publicación del blog, no diría cómo se ve esto como otra versión de marco 'compacta'. Se anuncia la .NET Coreversión 5.0, que es superior al último marco completo. Supongo que con eso quieren decir que es algo diferente. 13/11/2014 a las 12:00
  • 5
    Acabo de describir la historia de la versión .NETCore. Nada nuevo bajo el sol, existe desde hace 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 :) 13/11/2014 a las 12:04
  • 3
    Tengo tu punto. Aunque sigo pensando que anunciar un subconjunto de framework como la próxima era de .NET es un poco audaz. 13/11/2014 a las 12:14
52

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

Contenido de la respuesta original a continuación:


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

.NET Core is essentially a fork of the .NET Framework whose implementation is also optimized around factoring concerns.

We think of .NET Core as not being specific to either .NET Native nor ASP.NET 5 – the BCL and the runtimes are general purpose and designed to be modular. As such, it forms the foundation for all future .NET verticals.

Entonces .NET Native y ASP.NET 5 son solo "sujetos" de prueba para la nueva configuración del marco, en parte debido a que son bastante diferentes:

Ingrese la descripción de la imagen aquí

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

We think of .NET Core as not being specific to either .NET Native nor ASP.NET 5 – the BCL and the runtimes are general purpose and designed to be modular. As such, it forms the foundation for all future .NET verticals.

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

Implementación de NuGet:

In contrast to the .NET Framework, the .NET Core platform will be delivered as a set of NuGet packages. We’ve settled on NuGet because that’s where the majority of the library ecosystem already is.

Relación con los marcos actuales:

For Visual Studio 2015 our goal is to make sure that .NET Core is a pure subset of the .NET Framework. In other words, there wouldn’t be any feature gaps. After Visual Studio 2015 is released our expectation is that .NET Core will version faster than the .NET Framework. This means that there will be points in time where a feature will only be available on the .NET Core based platforms.

Resumen:

The .NET Core platform is a new .NET stack that is optimized for open source development and agile delivery on NuGet. We’re working with the Mono community to make it great on Windows, Linux and Mac, and Microsoft will support it on all three platforms.

We’re retaining the values that the .NET Framework brings to enterprise class development. We’ll offer .NET Core distributions that represent a set of NuGet packages that we tested and support together. Visual Studio remains your one- stop-shop for development. Consuming NuGet packages that are part of a distribution doesn’t require an Internet connection.

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

23

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

Flexible deployment: Can be included in your app or installed side-by-side user- or machine-wide.

Cross-platform: Runs on Windows, macOS and Linux; can be ported to other OSes. The supported operating systems (OSes), CPUs and application scenarios will grow over time, provided by Microsoft, other companies, and individuals.

Command-line tools: All product scenarios can be exercised at the command-line.

Compatible: .NET Core is compatible with .NET Framework, Xamarin and Mono, via the .NET Standard Library.

Open source: The .NET Core platform is open source, using MIT and Apache 2 licenses. Documentation is licensed under CC-BY. .NET Core is a .NET Foundation project.

Supported by Microsoft: .NET Core is supported by Microsoft, per .NET Core Support

Y esto es lo que incluye .NET Core:

A .NET runtime, which provides a type system, assembly loading, a garbage collector, native interoperability and other basic services.

A set of framework libraries, which provide primitive data types, application composition types and fundamental utilities.

A set of SDK tools and language compilers that enable the base developer experience, available in the .NET Core SDK.

The 'dotnet' application host, which is used to launch .NET Core applications. It selects the runtime and hosts the runtime, provides an assembly loading policy and launches the app. The same host is also used to launch SDK tools in much the same way.

19

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

Consulte docs.microsoft.com

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 “liviano”, 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 del 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, lo que antes no era posible. Entonces, si te encanta Mac o Ubuntu y eres un desarrollador de .NET, entonces configúralo.

Para Mono frente a .NET Core, Mono se desarrolló como .NET Framework para Linux, que ahora es adquirido por Microsoft (empresa llamada Xamarin ) y se utiliza en el desarrollo móvil. Eventualmente, Microsoft puede fusionar / migrar Mono a .NET Core. No me preocuparía por Mono en este momento.

0
12

Estaba tratando de 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í:

You should use .NET Core for your server application when:

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.

You should use .NET Framework for your server application when:

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 doesn’t support .NET Core.

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

EDITAR 7/10/2020 Echa un vistazo a .NET 5.0 - "... solo un .NET en el futuro, y podrás usarlo para apuntar a Windows, Linux, macOS, iOS, Android, tvOS, watchOS y WebAssembly y más "Se supone que se lanzará en noviembre de 2020.

11

Desde el sitio web de Microsoft :

.NET Core refers to several technologies including .NET Core, ASP.NET Core and Entity Framework Core.

Estas tecnologías son diferentes de .NET nativo en que se ejecutan con el tiempo de ejecución de CoreCLR (utilizado en la Plataforma universal de Windows ).

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

Las partes internas de .NET Core también están optimizadas para no usar módulos diferentes de su biblioteca principal a menos que la aplicación lo requiera.

1
  • 4
    ".NET Core se refiere a varias tecnologías, incluido .NET Core" ... excelentes cosas 15/01/19 a las 10:17
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 de abril de 2019.

3
  • 3
    Se desaconseja enfáticamente las respuestas de solo enlace y las respuestas principalmente basadas en opiniones . Consulte meta.stackexchange.com/a/8259 1 de mayo de 2019 a las 15:48
  • Entendido, edité la parte de opinión ... gracias por hacérmelo saber.
    itsikha
    7 de mayo de 2019 a las 10:56
  • 1
    ¿Mejorado de qué manera? ¿Puede proporcionar un resumen de lo que cree que son los cambios y adiciones más importantes? 21/02/20 a las 21:58
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 de .NET Framework.

Las aplicaciones .NET Core son compatibles con Windows, Linux y macOS. En pocas palabras .NET Core es similar al marco .NET, 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 es necesario que utilice archivos de software / DLL de terceros para la inyección de dependencias.

1
  • 1
    ¿Puede dar más detalles sobre la inyección de dependencia? ¿Qué significa eso realmente en este contexto? ¿Te refieres a marcos particulares? ¿Tiene algunas referencias / enlaces? 21 feb.20 a las 22:08
2

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

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 costosos para los usuarios habituales, especialmente para los usuarios finales de productos fabricados con 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 tecnologías de Microsoft, a pesar de sus grandes habilidades. Pero después de la producción de .NET Core, este problema se resuelve por completo y podemos satisfacer a nuestros clientes sin tener en cuenta su sistema operativo, etc.

1