¿Cuál es la diferencia entre .NET Core, .NET Framework y Xamarin?

362

Microsoft ahora tiene .NET Core, .NET Framework y Xamarin (Mono) en su familia .NET.

Parece que hay mucha superposición aquí. ¿Cuál es la diferencia entre estos tipos de .NET? ¿Cuándo debería elegir usar .NET Core en mi proyecto, en lugar de .NET Framework o Xamarin?

MeeChao
fuente
2
¡Buena pregunta! Aquí hay un artículo complementario sobre .net framework y .net core. pogsdotnet.blogspot.sg/2017/11/… ¡Gracias!
Allan Chua

Respuestas:

269

Debe usar .NET Core, en lugar de .NET Framework o Xamarin, en los siguientes 6 escenarios típicos de acuerdo con la documentación aquí .

1. Necesidades multiplataforma

Claramente, si su objetivo es tener una aplicación (web / servicio) que pueda ejecutarse en plataformas (Windows, Linux y MacOS), la mejor opción en el ecosistema .NET es usar .NET Core como su tiempo de ejecución (CoreCLR ) y las bibliotecas son multiplataforma. La otra opción es usar el Proyecto Mono.

Ambas opciones son de código abierto, pero .NET Core es compatible directa y oficialmente con Microsoft y tendrá una gran inversión en el futuro.

Cuando se utiliza .NET Core en todas las plataformas, la mejor experiencia de desarrollo existe en Windows con el IDE de Visual Studio que admite muchas características de productividad, incluida la gestión de proyectos, la depuración, el control de código fuente, la refactorización, la edición enriquecida que incluye Intellisense, las pruebas y mucho más. Pero el desarrollo rico también es compatible con Visual Studio Code en Mac, Linux y Windows, incluidos intellisense y depuración. Incluso los editores de terceros como Sublime, Emacs, VI y más funcionan bien y pueden obtener el editor inteligente utilizando el proyecto de código abierto Omnisharp.

2. Microservicios

Cuando está creando un sistema orientado a microservicios compuesto por múltiples microservicios independientes, dinámicamente escalables, con estado o sin estado, la gran ventaja que tiene aquí es que puede usar diferentes tecnologías / marcos / idiomas a nivel de microservicio. Eso le permite utilizar el mejor enfoque y tecnología por micro áreas en su sistema, por lo que si desea crear microservicios escalables y de alto rendimiento, debe usar .NET Core. Eventualmente, si necesita usar cualquier biblioteca de .NET Framework que no sea compatible con .NET Core, no hay problema, puede construir ese microservicio con .NET Framework y en el futuro podría sustituirlo por .NET Núcleo.

La plataforma de infraestructura que podría usar son muchas. Idealmente, para sistemas de microservicios grandes y complejos, debe usar Azure Service Fabric. Pero para los microservicios sin estado también puede usar otros productos como Azure App Service o Azure Functions.

Tenga en cuenta que a partir de junio de 2016, no todas las tecnologías dentro de Azure son compatibles con .NET Core, pero la compatibilidad con .NET Core en Azure aumentará dramáticamente ahora que .NET Core es lanzado RTM.

3. Los mejores sistemas escalables y de alto rendimiento.

Cuando su sistema necesita el mejor rendimiento y escalabilidad posibles para que obtenga la mejor capacidad de respuesta sin importar cuántos usuarios tenga, entonces es donde realmente brillan .NET Core y ASP.NET Core. Cuanto más pueda hacer con la misma cantidad de infraestructura / hardware, más rica será la experiencia que tendrá para sus usuarios finales, a un costo menor.

Los días de las mejoras de rendimiento de la ley de Moore para CPU individuales ya no se aplican; sin embargo, necesita hacer más mientras su sistema está creciendo y necesita una mayor escalabilidad y rendimiento para los usuarios más exigentes de todos los días, que están creciendo exponencialmente en números. En última instancia, debe ser más eficiente, optimizar en todas partes y escalar mejor en grupos de máquinas, máquinas virtuales y núcleos de CPU. No es solo una cuestión de satisfacción del usuario; También puede hacer una gran diferencia en el costo / TCO. Por eso es importante luchar por el rendimiento y la escalabilidad.

Como se mencionó, si puede aislar pequeñas piezas de su sistema como microservicios o cualquier otro enfoque débilmente acoplado, será mejor ya que no solo podrá evolucionar cada pieza pequeña / microservicio de forma independiente y tener un mejor a largo plazo agilidad y mantenimiento, pero también podrá utilizar cualquier otra tecnología a nivel de microservicio si lo que necesita hacer no es compatible con .NET Core. Y eventualmente podrá refactorizarlo y llevarlo a .NET Core cuando sea posible.

4. Desarrollo de estilo de línea de comando para Mac, Linux o Windows.

Este enfoque es opcional cuando se usa .NET Core. También puede usar el IDE completo de Visual Studio, por supuesto. Pero si usted es un desarrollador que desea desarrollar con editores livianos y un uso intensivo de la línea de comandos, .NET Core está diseñado para CLI. Proporciona herramientas de línea de comandos simples disponibles en todas las plataformas compatibles, lo que permite a los desarrolladores crear y probar aplicaciones con una instalación mínima en máquinas de desarrollo, laboratorio o producción. Los editores como Visual Studio Code usan las mismas herramientas de línea de comandos para sus experiencias de desarrollo. Y los IDE como Visual Studio usan las mismas herramientas de CLI pero las ocultan detrás de una rica experiencia IDE. Los desarrolladores ahora pueden elegir el nivel con el que desean interactuar con la cadena de herramientas, desde CLI hasta editor e IDE.

5. Necesita lado a lado de las versiones .NET por nivel de aplicación.

Si desea poder instalar aplicaciones con dependencias en diferentes versiones de frameworks en .NET, debe usar .NET Core que proporciona el 100% en paralelo como se explicó anteriormente en este documento.

6. Aplicaciones Windows 10 UWP .NET.

Además, es posible que también desee leer:

  1. ¿Cuándo NO debo usar .NET Core?
  2. ¿Cuándo debería seguir usando .NET Framework 4.x, en lugar de .NET Core?
  3. ¿Cuándo debería usar Xamarin, en lugar de .NET Core?
Fiona Bi
fuente
17
¿Por qué asp.net Core es más eficiente? ¿Por qué es mejor cuando estás construyendo microservicios?
Juan Zamudio
44
Ahora Visual Studio para Mac también está disponible. Entonces, un punto positivo más hacia .NET Core. visualstudio.com/vs/visual-studio-mac
Husyn
8
Sus enlaces se rompen
shaneparsons
2
@JuanZamudio Las versiones del marco son capas monolíticas, cada una dependiente de la versión inmediatamente anterior, en una cadena de dependencia de vuelta a la versión 2.0 que reemplazó por completo a 1.1. Como resultado, si usa cualquier cosa desde 4.5, implícitamente dependerá de todo hasta el 2.0. El marco principal trata más sobre la refactorización de dependencias para eliminar el equipaje irrelevante que la reescritura de la API, que en su mayoría no se modifica por completo. Algunas cosas también se simplificaron enormemente, como EF Core.
Peter Wone
Gracias por la respuesta descriptiva
Tolga Kartal
171

Así es como Microsoft lo explica:

.NET Framework, .NET Core, Xamarin

.NET Framework es el sabor "completo" o "tradicional" de .NET que se distribuye con Windows. Úselo cuando esté creando una aplicación de escritorio para Windows o UWP, o trabajando con ASP.NET 4.6+ anterior.

.NET Core es .NET multiplataforma que se ejecuta en Windows, Mac y Linux. Úselo cuando desee crear aplicaciones web o de consola que puedan ejecutarse en cualquier plataforma, incluidos los contenedores Docker. Esto no incluye aplicaciones de escritorio / UWP actualmente.

Xamarin se utiliza para crear aplicaciones móviles que pueden ejecutarse en dispositivos iOS, Android o Windows Phone.

Xamarin generalmente se ejecuta sobre Mono , que es una versión de .NET que fue creada para soporte multiplataforma antes de que Microsoft decidiera oficialmente multiplataforma con .NET Core. Al igual que Xamarin, la plataforma Unity también se ejecuta sobre Mono.


Un punto común de confusión es dónde encaja ASP.NET Core. ASP.NET Core puede ejecutarse sobre .NET Framework (Windows) o .NET Core (multiplataforma), como se detalla en esta respuesta: Diferencia entre ASP. NET Core (.NET Core) y ASP.NET Core (.NET Framework)

Nate Barbettini
fuente
3
Cada vez que alguien dice que .NET Core es multiplataforma, un nuevo desarrollador se confunde. '.NET Core' solo admite UWP + ASP.NET Core y ASP.NET Core es multiplataforma, UWP no.
Hassan Tareq
@HassanTareq Eso no es del todo correcto. .NET Core se refiere al tiempo de ejecución y las bibliotecas que pueden ejecutarse en Windows, Mac o Linux. ASP.NET Core es multiplataforma porque .NET Core es multiplataforma.
Nate Barbettini
Entonces sería útil para los novatos si mencionas que, aunque .Net core ( tiempo de ejecución y bibliotecas ) es multiplataforma, no podemos usar la aplicación UWP en Mac / Linux. UWP no es multiplataforma, esperaba que UWP fuera una alternativa multiplataforma de WPF (Xamarin.Forms sí)
Hassan Tareq
@HassanTareq Buena sugerencia, he editado mi respuesta.
Nate Barbettini
1
Xamarin Forms ahora se ejecuta en casi todo, desde una base de código. Escritorio UWP de Windows, escritorio WPF, MacOS, iOS, Android y Tizen (televisores). El valor predeterminado es apuntar a .NET Standard desde la implementación de Core. ¡Buenos tiempos!
Sean Anderson el
35

Puede consultar en esta línea: diferencia entre ASP.NET Core (.NET Core) y ASP.NET Core (.NET Framework)

.NET Framework, .NET Core, Xamarin

Xamarin no es un debate en absoluto. Cuando desee crear aplicaciones móviles (iOS, Android y Windows Mobile) con C #, Xamarin es su única opción.

.NET Framework es compatible con Windows y aplicaciones web. Hoy en día, puede usar Windows Forms, WPF y UWP para crear aplicaciones de Windows en .NET Framework. ASP.NET MVC se utiliza para crear aplicaciones web en .NET Framework.

.NET Core es el nuevo marco de código abierto y multiplataforma para crear aplicaciones para todos los sistemas operativos, incluidos Windows, Mac y Linux. .NET Core solo admite UWP y ASP.NET Core. UWP se utiliza para construir Windows 10 objetivos de Windows y aplicaciones móviles. ASP.NET Core se utiliza para crear aplicaciones web basadas en navegador.

desea más detalles consulte estos enlaces
https://blogs.msdn.microsoft.com/dotnet/2016/07/15/net-core-roadmap/ https://docs.microsoft.com/en-us/dotnet/articles / estándar / elegir-core-framework-server

logeshpalani98
fuente
12
  1. .NET es el ecosistema basado en lenguaje C #
  2. .NET Standard es estándar (en otras palabras, especificación) de .NET Ecosystem.

.Net Core Class Library se basa en el estándar .Net . .NET Standard solo puede hacer un proyecto de biblioteca de clases que no se pueda ejecutar de manera independiente y que otro proyecto ejecutable de .NET Core o .NET Framework haga referencia a él . Si desea implementar una biblioteca que sea portátil en .Net Framework , .Net Core y Xamarin , elija una biblioteca estándar .Net

  1. .NET Framework es un marco basado en .NET y es compatible con aplicaciones web y Windows

(Puede hacer un proyecto ejecutable (como la aplicación de consola o la aplicación ASP.NET) con .NET Framework

  1. ASP.NET es una tecnología de desarrollo de aplicaciones web que se basa en .NET Framework
  2. .NET Core también es un marco basado en .NET .

Es el nuevo marco de código abierto y multiplataforma para crear aplicaciones para todos los sistemas operativos, incluidos Windows, Mac y Linux.

  1. Xamarin es un marco para desarrollar una aplicación móvil multiplataforma ( iOS, Android y Windows Mobile ) usando C #

Soporte de implementación de .NET Standard [azul] y plataforma mínima viable para soporte completo de .NET Standard (más reciente: [ https://docs.microsoft.com/en-us/dotnet/standard/net-standard#net-implementation- apoyo] )

Razib Hossain
fuente
Voto negativo para la tabla "Historial de versiones". No es el "Historial de versiones" de .net / standard o core lo que has reproducido. Son las versiones mínimas viables de la plataforma que puede usar si desea hacer coincidir una versión estándar .Net estándar. EG: si desea admitir .NET Standard 1.4 en Full .NET, la versión más baja que puede usar es 4.6.1
shawty
Voto
negativo
Creo que desarrollaré en Apple en su lugar ...
Richard Hammond
7

.NET 5 será una versión unificada de todas las variantes de .NET que saldrán en noviembre de 2020, por lo que ya no será necesario elegir entre variantes. ingrese la descripción de la imagen aquí

Yanlend
fuente
1
Es mentira. ¡.NET Core no puede admitir WPF / WinForms en Linux!
Vincent
Eso es cierto, pero otras variantes de .NET tampoco lo admitieron. La elección de una variante de .NET se ha ido, lo cual es algo bueno.
Yanlend
1

.NET Core es la versión actual de .NET que debería estar usando en este momento (más funciones, errores corregidos, etc.)

Xamarin es una plataforma que proporciona soluciones para problemas móviles multiplataforma codificados en C #, por lo que no necesita usar Swift por separado para iOS y lo mismo ocurre con Android.

Marto99
fuente
2
Diría que .Net Core es lo que debería usar si debe ejecutar Linux o Linux y Windows. Pero también podrías presentar ese caso para Mono, creo. Ciertamente no tiene más características. Por definición, son solo los bits "básicos", no tiene ninguno de los bits exclusivos de Windows, por lo tanto, tiene menos funciones. Y solo estoy adivinando, pero parece poco probable que .Net Core tenga menos errores. .Net Framework ha estado en el mundo durante casi dos décadas. Me imagino que está bastante endurecido en este momento. Pero eso es solo una suposición.
Jason Boyd
Ciertamente tiene más características nuevas, recientemente agregaron nuevas clases que no se agregarán a .NET 4.8. También portaron WPF y WinForms. En realidad, parece que .NET Core podría reemplazar a .NET Framework. Parece ser más eficiente tampoco.
asdf
0

Xamarin se utiliza para aplicaciones telefónicas (tanto IOS / Android). .NET Core se utiliza para diseñar aplicaciones web que pueden funcionar tanto en Apache como en IIS.

Esa es la diferencia en dos oraciones.

usuario10868910
fuente
Hmm ... bueno, aparte de perder la tercera opción (.net framework) no es del todo cierto. .NET core se puede usar en casi todo (Web, escritorio, móvil, nube, juegos, IoT, etc.). .NET Framework está centrado en Windows y se cerró por completo. Mono era la versión de código abierto (impulsada por la comunidad) de .NET Framework utilizada por Xamarin que colocaba las herramientas móviles multiplataforma sobre mono. Xamarin eventualmente será reemplazado, probablemente por Blazor (actualmente pwa, pero los híbridos y luego los nativos son parte de la hoja de ruta).
Shox
Es verdad. Xamarin es para aplicaciones móviles. No creo que sea reemplazado pronto. ASMX todavía se usa para los servicios web y se incluye en Visual 2019.
user10868910
-1

actualizado en mayo de 2019

debe usar .Net Core 3.0 y luego actualizar a su próxima versión .Net 5, todo lo que necesita es una sola plataforma unificada .Net5

Solo habrá un .NET en el futuro, y podrá usarlo para apuntar> Windows, Linux, macOS, iOS, Android, tvOS, watchOS y WebAssembly y más. https://devblogs.microsoft.com/dotnet/introducing-net-5/

tirando
fuente
Esta respuesta no tiene sentido.
Kiril1512