mvc - ¿Qué es ".NET Core"?
request baseurl c# (11)
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
.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:
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? 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.
.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 softwares / dlls de terceros para la inyección de dependencia.
.NET Core es una nueva implementación multiplataforma de estándares .NET (ECMA 335) similar a Mono pero realizada por el propio Microsoft.
.Net Core es una versión de código abierto y multiplataforma de .net framework. Además de las grandes capacidades que tienen, los productos de Microsoft siempre fueron caros para los usuarios habituales, especialmente para los usuarios finales de productos 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 tener en cuenta su sistema operativo y etc.
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 clase 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 runtime de runtime , 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 runtime de runtime 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.
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 blogs.msdn.com/b/dotnet/archive/2014/12/04/… sobre el tema, aquí algunos puntos clave 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.
Entonces .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:
ver, incluso necesitan un nivel bajo separado, pero la mayor parte 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, nuestra expectativa es que .NET Core se versionará 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.
Mantenemos 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.
Es un subconjunto de .NET Framework, iniciado con la edición Compact Framework. Progresó en Silverlight, Windows Store y Windows Phone. Centrado en mantener la implementación pequeña, adecuada para descargas rápidas y dispositivos con capacidades de almacenamiento limitadas. Y más fácil de mostrar en plataformas que no sean Windows, seguramente 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 de reconocer cuando se dirige a una versión de marco de este tipo, faltarán muchas cosas.
Utilizará un conjunto distinto de conjuntos de referencia que solo exponen lo que admite el tiempo de ejecución.
Almacenado en su máquina en el directorio
C:/Program Files (x86)/Reference Assemblies/Microsoft/Framework/.NETCore
.
Actualización: después del lanzamiento de .NETCore 2.0, he visto algunos números representativos que dan una idea decente. Han estado trabajando arduamente en el back-port del framework apis a .NETCore en los últimos dos años. .NETCore 1.0 originalmente soportaba 13,000 apis. .NETCore 2.0 agregó 20,000 apis, 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 apis.
Intenté crear un nuevo proyecto en VS2017 hoy (actualizado recientemente desde 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! :)
Encontré este enlace de documentos y lo encontré muy útil, así que compartí. Los detalles de las viñetas también se proporcionan en el artículo. Solo 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 doesn’t support .NET Core.
La documentation actual tiene una buena explicación de qué es .NET Core, las áreas a 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.
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: https://www.c-sharpcorner.com/article/difference-between-net-framework-and-net-core/ de hace un mes
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 / VS2015. .NET Core es más amigable con el mundo de código abierto como nodejs, 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 Mobile Development. Eventualmente, Microsoft puede fusionar / migrar Mono a .NET core. No me preocuparía por Mono en este momento.
.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