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

411

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

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

1
  • 1
    La etiqueta que falta es microsoft, pero no existe. Esta pregunta asume Microsoft. Hoy también debe elegir entre: para aplicaciones de interfaz gráfica de usuario de escritorio: por ejemplo, java. Para dispositivos móviles: Android nativo / objetivo-C, o uno de muchos otros marcos multiplataforma. Para web: por ejemplo, matraz. Como muestra la respuesta que menciona .Net5, Microsoft está tratando desesperadamente de afianzarse en otras plataformas además de MS-Windows y siente la competencia de Mono de código abierto, pero aún no ha encontrado una solución estable.
    Roland
    15 de enero a las 16:35
298

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. Cross-Platform needs

Clearly, if your goal is to have an application (web/service) that should be able to run across platforms (Windows, Linux and MacOS), the best choice in the .NET ecosystem is to use .NET Core as its runtime (CoreCLR) and libraries are cross-platform. The other choice is to use the Mono Project.

Both choices are open source, but .NET Core is directly and officially supported by Microsoft and will have a heavy investment moving forward.

When using .NET Core across platforms, the best development experience exists on Windows with the Visual Studio IDE which supports many productivity features including project management, debugging, source control, refactoring, rich editing including Intellisense, testing and much more. But rich development is also supported using Visual Studio Code on Mac, Linux and Windows including intellisense and debugging. Even third party editors like Sublime, Emacs, VI and more work well and can get editor intellisense using the open source Omnisharp project.

2. Microservices

When you are building a microservices oriented system composed of multiple independent, dynamically scalable, stateful or stateless microservices, the great advantage that you have here is that you can use different technologies/frameworks/languages at a microservice level. That allows you to use the best approach and technology per micro areas in your system, so if you want to build very performant and scalable microservices, you should use .NET Core. Eventually, if you need to use any .NET Framework library that is not compatible with .NET Core, there’s no issue, you can build that microservice with the .NET Framework and in the future you might be able to substitute it with the .NET Core.

The infrastructure platform you could use are many. Ideally, for large and complex microservice systems, you should use Azure Service Fabric. But for stateless microservices you can also use other products like Azure App Service or Azure Functions.

Note that as of June 2016, not every technology within Azure supports the .NET Core, but .NET Core support in Azure will be increasing dramatically now that .NET Core is RTM released.

3. Best performant and scalable systems

When your system needs the best possible performance and scalability so you get the best responsiveness no matter how many users you have, then is where .NET Core and ASP.NET Core really shine. The more you can do with the same amount of infrastructure/hardware, the richer the experience you’ll have for your end users – at a lower cost.

The days of Moore’s law performance improvements for single CPUs does not apply anymore; yet you need to do more while your system is growing and need higher scalability and performance for everyday’ s more demanding users which are growing exponentially in numbers. You need to get more efficient, optimize everywhere, and scale better across clusters of machines, VMs and CPU cores, ultimately. It is not just a matter of user’s satisfaction; it can also make a huge difference in cost/TCO. This is why it is important to strive for performance and scalability.

As mentioned, if you can isolate small pieces of your system as microservices or any other loosely-coupled approach, it’ll be better as you’ll be able to not just evolve each small piece/microservice independently and have a better long-term agility and maintenance, but also you’ll be able to use any other technology at a microservice level if what you need to do is not compatible with .NET Core. And eventually you’d be able to refactor it and bring it to .NET Core when possible.

4. Command line style development for Mac, Linux or Windows.

This approach is optional when using .NET Core. You can also use the full Visual Studio IDE, of course. But if you are a developer that wants to develop with lightweight editors and heavy use of command line, .NET Core is designed for CLI. It provides simple command line tools available on all supported platforms, enabling developers to build and test applications with a minimal installation on developer, lab or production machines. Editors like Visual Studio Code use the same command line tools for their development experiences. And IDE’s like Visual Studio use the same CLI tools but hide them behind a rich IDE experience. Developers can now choose the level they want to interact with the tool chain from CLI to editor to IDE.

5. Need side by side of .NET versions per application level.

If you want to be able to install applications with dependencies on different versions of frameworks in .NET, you need to use .NET Core which provides 100% side-by side as explained previously in this document.

6. Windows 10 UWP .NET apps.

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

  1. ¿Cuándo NO debería 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?
5
  • 18
    ¿Por qué asp.net Core es más eficaz? ¿Por qué es mejor cuando se crean microservicios? 19 de ene. De 2017 a las 20:23
  • 4
    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
    11 de mayo de 2017 a las 3:45
  • 9
    Tus enlaces estan rotos 24/01/18 a las 20:20
  • 4
    @JuanZamudio Las versiones del marco son capas monolíticas, cada una de las cuales depende de la versión inmediatamente anterior, en una cadena de dependencia hasta la versión 2.0 que reemplazó por completo a la 1.1. Como resultado, si usa algo desde 4.5, implícitamente depende de todo hasta 2.0. El marco Core se trata más de refactorizar las dependencias para eliminar el equipaje irrelevante que de reescribir la API, que en su mayor parte, pero no del todo, no ha cambiado. Algunas cosas también se simplificaron enormemente, como EF Core. 14 de junio de 2018 a las 23:43
  • 1
    Se diferencian solo en una cosa: MS eliminará Core en los 5 años más cercanos. Mientras que el programador todavía usa .NET FW 4.8 y WinForms / WPF.
    Vincent
    12 abr.20 a las 15:29
191

Así lo explica Microsoft:

.NET Framework, .NET Core, Xamarin

.NET Framework es la versión "completa" o "tradicional" de .NET que se distribuye con Windows. Úselo cuando esté creando una aplicación de escritorio para Windows o UWP, o cuando trabaje con una versión anterior de ASP.NET 4.6+.

.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, incluso dentro de los contenedores de Docker. Actualmente, esto no incluye las aplicaciones de escritorio o para UWP.

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

Xamarin generalmente se ejecuta sobre Mono , que es una versión de .NET que se creó para soporte multiplataforma antes de que Microsoft decidiera oficialmente pasar a 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)

6
  • 5
    Siempre 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. 19 dic 2017 a las 7:09
  • 1
    @HassanTareq Eso no es del todo correcto. .NET Core se refiere al tiempo de ejecución y las bibliotecas que se pueden ejecutar en Windows, Mac o Linux. ASP.NET Core es multiplataforma porque .NET Core es multiplataforma. 19/12/2017 a las 20:11
  • 1
    Entonces sería útil para los novatos si menciona 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 es) 20 de diciembre de 2017 a las 4:50
  • @HassanTareq Buena sugerencia, he editado mi respuesta. 20/12/2017 a las 15:49
  • 1
    Xamarin Forms ahora se ejecuta en casi todo desde una base de código. Escritorio de Windows UWP, escritorio de WPF, MacOS, iOS, Android y Tizen (televisores). El valor predeterminado es apuntar a .NET Standard desde la implementación de Core. ¡Buenos tiempos! 5 de marzo de 2019 a las 5:29
47

Puede hacer referencia 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 aplicaciones web y de Windows. 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 es compatible con UWP y ASP.NET Core. UWP se utiliza para crear objetivos de Windows 10 para aplicaciones móviles y de Windows. ASP.NET Core se utiliza para crear aplicaciones web basadas en navegador.

si 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 / eligiendo-core-framework-server

1
  • El tercer cuadro debería ser "Mono", que es otra implementación del estándar .Net. Xamarin no lo es, es solo una biblioteca multiplataforma que se ejecuta sobre Mono (o solía ??) . Para hacer las cosas más confusas, Xamarin (la compañía) compró Mono (la compañía), y luego Microsoft compró ambos. 1 de junio a las 23:53
20
  1. .NET es el ecosistema basado en lenguaje c #
  2. .NET Standard es estándar (en otras palabras, especificación) del ecosistema .NET .

.Net Core Class Library is built upon the .Net Standard. .NET Standard you can make only class-library project that cannot be executed standalone and should be referenced by another .NET Core or .NET Framework executable project.If you want to implement a library that is portable to the .Net Framework, .Net Core and Xamarin, choose a .Net Standard Library

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

(You can make executable project (like Console application, or ASP.NET application) with .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 .

It is the new open-source and cross-platform framework to build applications for all operating system including Windows, Mac, and Linux.

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

Implementation support of .NET Standard[blue] and minimum viable platform for full support of .NET Standard (latest: [https://docs.microsoft.com/en-us/dotnet/standard/net-standard#net-implementation-support])

1
  • 1
    Voto negativo eliminado, ahora que ha actualizado y documentado su respuesta correctamente :-)
    shawty
    30/10/19 a las 17:38
14

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

2
  • 3
    Es mentira. .NET Core no es compatible con WPF / WinForms en Linux.
    Vincent
    12 abr.20 a las 15:30
  • Eso es cierto, pero otras variantes de .NET tampoco lo admitían. La elección de una variante de .NET se ha ido, lo cual es bueno.
    yanlend
    11 de mayo de 2020 a las 14:15
3
  • .NET Framework: implementación heredada solo para Windows de Microsoft de .NET. Introducido en 2002, en fase de eliminación.
  • .NET 5 (sucesor de .NET Core 3.1): reimplementación moderna de .NET Framework destinada a reemplazarlo, compatible con Windows, macOS y Linux. Introducida en 2016, una versión adicional podría absorber Xamarin
  • Xamarin: Mono con enlaces de plataforma a sistemas operativos y API que no son de Windows y herramientas adaptadas al desarrollo de aplicaciones móviles (iOS, Android y, recientemente, escritorio). Introducido en 2012. Mono es una implementación de .NET que no es de Microsoft desarrollada por la comunidad e introducida a principios de la década de 2000 y que compite con .NET Framework.
2

.NET Core es la versión actual de .NET que debería usar 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 es necesario usar Swift por separado para IOS y lo mismo ocurre con Android.

2
  • 2
    Yo diría que .Net Core es lo que debería usar si debe ejecutar en Linux o Linux y Windows. Pero creo que también podrías defender a Mono. Ciertamente no tiene más funciones. Por definición, son solo los bits "centrales", 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 punto. Pero eso es solo una suposición. 15 feb 2019 a las 7:02
  • 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 .NET Framework. También parece ser más eficaz.
    asdf
    5/03/19 a las 9:47
0

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

Esa es la diferencia en dos oraciones.

2
  • Hmm ... bueno, aparte de perder la tercera opción (.net framework), no es del todo cierto. .NET core se puede utilizar en prácticamente todo (web, escritorio, móvil, nube, juegos, IoT, etc.). .NET Framework está centrado en Windows y fue completamente cerrado. Mono era la versión de código abierto (impulsada por la comunidad) de .NET Framework utilizada por Xamarin, que puso las herramientas móviles multiplataforma sobre mono. Xamarin eventualmente será reemplazado, muy probablemente por Blazor (actualmente pwa, pero híbrido y luego nativo son parte de la hoja de ruta).
    shox
    28 de mayo de 2020 a las 19:27
  • Es verdad. Xamarin es para aplicaciones móviles. No creo que sea reemplazado pronto. ASMX todavía se usa para servicios web y se incluye en Visual 2019. 29 de mayo de 2020 a las 23:21
-2

El trabajo de .Net Frame se utiliza para aplicaciones basadas en Windows. El trabajo de .Net Core Frame se utiliza para aplicaciones base multiplataforma. El trabajo de Xamarin Frame se utiliza para el desarrollo de aplicaciones móviles.