En este post vamos a ver cuales son las diferentes versiones de .NET; Sobre todo cuando se empieza en el entorno, te surgen muchas dudas, porque ya sea por marketing o por prueba y error, Microsoft no ha estado muy atinado durante el pasado en el nombre.
Aunque como ya veremos, este problema ya no será tan grande en el futuro.
Índice
1 - El entorno .NET
En este canal hacemos codigo principalmente en C# y por ello en otros post tengo dicho código explicado, pero al final del día escribimos texto sobre un documento, por lo que necesitamos software que pueda entender ese documento y ejecutarlo en la máquina.
En el caso de C#, el software que transforma el código en un lenguaje que pueda entender la máquina es un framework llamado .NET.
C# es una parte de .NET pero si que es verdad que en el mundo real en el 99% de los casos vas a referirte a C#, pero como digo no es único.
El Framework .NET es capaz de convertir no solo C#
, sino además F#
y Visual Basic
en código que puede entender la máquina.
2 - ¿Qué es .NET Framework?
En el año 2002 es cuando Microsoft decidió lanzar .NET Framework
de lo que hace casi 20 años, y seamos sinceros a día de hoy sigue siendo utilizado mucho.
.NET Framework
es el motor que entiende tu codigo en C#, F# o Visual Basic y lo ejecuta contra la máquina a través del Runtime
. También se encarga de la compilación del código o del recolector de basura.
Además de proveer la el CLR
(common language runtime) cuando programamos en .NET Framework
lo hacemos utilizando la librería de código que Microsoft nos proporciona, la cual contiene una gran variedad de aspectos, clases, interfaces, tipos, y muchas otras características.
Finalmente con ella podemos hacer aplicaciones web con ASP.NET, aplicaciones de escritorio con Windows presentation foundation, o bueno, si son más viejas serán winforms y aplicaciones de consola.
- Nota: Incluir también que .NET Framework nos proporciona acceso a las API de windows o a las de otros softwares de Microsoft, como puede ser el excel o word. Todos hemos trabajado en la típica empresa que tiene el paquete de office instalado en el servidor para hacer alguna factura y tal con el software.
Como punto negativo, decir que las aplicaciones escritas con .NET Framework solo funcionan en windows y en caso de las aplicaciones web, tiene que estar alojada en un IIS (internet information server).
Finalmente, las aplicaciones escritas con .NET Framework son muy pesadas (en mebagites).
2.1 - Cuándo utilizar .NET Framework?
Si estás leyendo este post, es porque estás al menos en 2021, por lo tanto seré claro: NUNCA.
Más adelante veremos las diferentes opciones.
3 - ¿Qué es .NET Core?
Similar al caso anterior, pero más moderno, es un motor que fue lanzado su versión 1 en 2016 y es completamente open source, lo cual ha sido crucial, ya que la comunidad lo recibió con los brazos abiertos lo cual ha ayudado a su correcto desarrollo durante estos años.
La forma en la que las aplicaciones se ejecutan en .net Core es un poco diferente a como se ejecutaban en .NET Framework. Con .NET Core ejecutamos todo en nuestro appHost
, la cual tiene acceso a la librería de .NET Core
y al Core CLR
..
Es importante enfatizar que ejecuta las versiones core de la librería y del CLR porque no son los mismos que en la versión de .NET Framework, sino que han sido refactorización y en muchos casos divididos en múltiples librerías para así ser más ligera.
Lo cual permite a tu aplicación ser super ligera ya que únicamente tienes las librerías o paquetes extremadamente necesarios para hacerla correr.Por supuesto, tu puedes añadir los que quieras ya sean de la comunidad a través de nuget o tuyos propios.
Debido a esta división, hoy en dia .NET por ejemplo nos viene con paquetes para crear proyectos por defecto web, ya sean MVC, API o Blazor, ya bien sean en servidor o WebAssembly.
Y las universal windows platform apps para hacer aplicaciones de escritorio.
Como punto importante del cambio a .NET Core, indicar que el código puede ser ejecutado en múltiples plataformas y arquitecturas (x86, x64, cpus ARM), si creais una aplicación web la podréis ejecutar y desarollar tanto en windows, como en linux como en mac.
Lo cual es una gran ventaja para las empresas en términos económicos.Y una ventaja importante para usuarios como yo que tenemos un pequeño blog, ya que el costo de un servidor con linux es la mitad que uno con windows.
Otro de los beneficios es que puedes instalar en tu máquina tantos runtimes como quieras, para hacer todas las aplicaciones compatibles. Pese a ser posible hacerlo, no es completamente necesario, ya que .NET Core es siempre compatible con las versiones anteriores. por lo que si tienes la última versión de .NET Core instalado en tu máquina, todas las apps que tengas escritas en .NET Core se ejecutarán correctamente.
Finalmente indicar que cuando construyes aplicaciones (build) con .NET Core puedes especificar que sea una “self contained application” la cual no solo será tu aplicación, si no, además contendrá todos los componentes necesarios para que la aplicación se pueda ejecutar en cualquier máquina, incluido el runtime
3.1 - Cuándo utilizar .NET Core?
Hoy en día a finales de 2021 deberemos utilizar .NET Core en su versión 3.1 para aquellos productos web, consola o escritorio, que queramos en producción y que queramos que sean estables.
Hay que tener en cuenta que .NET Core 3.1 es una versión LTS lo que implica que tiene soporte por un largo periodo; en concreto .NET Core 3 fue lanzado en diciembre de 2019 y terminará su soporte en diciembre de 2022; lo que implica 3 años de soporte por parte de microsoft (parches de seguridad, actualizaciones, etc).
4 - Qué es .NET?
El título de este punto puede parecer un poco redundante, porque hace pensar que nos referimos al entorno de .NET. y en parte sí, pero no, nos estamos refiriendo al framework.
Como has podido imaginar, en la comunidad de .NET había dudas sobre el nombre, que si .NET Framework, que si .NET Core.
Pero, ¿Qué opinaba Microsoft al respecto?
Bueno Microsoft decidió que lo mejor que podía hacer era combinar ambos frameworks, asi que había que ponerle un nombre nuevo, y en este caso, eligieron .NET
(a secas),lo cual, parece haber liado más las cosas. Eso sí, en unos años nadie se acordará de este momento.
Así que si, Microsoft combinó .net core junto a .NET Framework y lo llamó .NET en concreto la primera de las versiones fue .NET 5.
Y en teoría, es completamente retrocompatible con ambos frameworks, pero yo no lo he probado de .NET Framework 4.8 a .NET 5; Desde .NET Core 3.1 funciona sin problemas, de hecho, esta web fue inicialmente desarrollada en .NET Core 3.1 y luego migré a 5.
4.1 - Cuándo utilizar .NET?
En unos meses podremos disfrutar de la .NET Conf de 2022 en la que anunciarán oficialmente .NET 6, ahora mismo se puede obtener pero en modo preview pero actualmente la versión que deberíamos elegir es .NET 5.
Eso sí, tendremos que migrar a .NET 6 en mayo de 2022 que es cuando .NET 5 deja de tener soporte, ya que .NET 6 será LTS.
No hay mucho más que decir, no hay ningún motivo para que no creéis vuestros proyectos ya sea en .NET 5 o en 6 en caso de que no os importe ponerlo en producción antes de que las nuevas funcionalidades estén estables.
5 - ¿Qué es Xamarin?
Finalmente dentro de .NET tenemos otro runtime, lo que se llama “mono
” originariamente mono
fue un fork del runtime de .NET con la idea de poder correr aplicaciones .NET en múltiples plataformas
De hecho, hace muuuchos años (soy viejo ya) se podía programar en C# en mac a través de XCode utilizando mono.
Hoy en día es utilizado para crear aplicaciones móviles (android, osx) o aplicaciones para mac.
5.1 - Cuándo utilizar Xamarin?
Actualmente si quieres crear aplicaciones móviles yo recomendaría Xamarin.
Con .NET 6 se supone que iba a salir tanto los Blazor bindings
como .NET MAUI
(multi platform app). Pero parece que lo han tenido que retrasar.
En este post Scott Hunter eplica el mótivo, y es básicamente que no cumple unos estándares de claidad, y prefieren sacarlo mas adelante, mas o menos a mediados de 2022.
6 - Qué es .NET Standard?
Finalmente vamos a ver que es .NET Standard
que estoy seguro de que has oído hablar de él.
Para resumir, .NET Standard está pensado para el código que va a ser compartido entre diferentes runtimes, ya que todos los runtimes (.NET Framework, .NET Core, Xamarin) son capaces de correr código escrito en .NET Standard.
Pero .NET Standard
por sí solo, no puede ser ejecutado, me refiero, no puedes crear una aplicación de consola que sea .NET Standard, sino que tendrá que ser .NET Core y luego, quizá utilices algún código común que sea NET Standard.
Nos podemos imaginar .NET Standard como una capa antes del runtime, simplemente algo que añadir a las librerías que proporciona el lenguaje.
6.1 - Cuándo utilizar .NET Standard
Si tu código es .NET 5 o superior, no necesitas net standard (pese a que puede ser ejecutado) ya que la idea de .NET 5 es reemplazar también .NET Standard.
En este post Immo Landwerth puedes encontrar más información al respecto.
Por el contrario, si estas en la típica empresa que está migrando de .NET Framework, probablemente estés migrando de .NET Framework 4.8 a .NET Core 3.1 (es el caso más común) en este escenario, te puede servir para tener código compartido entre ambos proyectos.
Por ponerte un ejemplo mi librería de Railway oriented programming está escrita en .NET Standard
¿Qué versión de .NET elegir?
Si estás en este post probablemente tengas dudas sobre qué versión elegir para tu software.
A día de hoy (septiembre 2021) .NET 6, Ahora, .NET 6 está en preview hasta mayo de 2022 así que si no quieres arriesgar a que alguna funcionalidad de las nuevas no funcione correctamente siempre puedes utilizar .NET 5.
- Nota: cuando se anuncie oficialmente
C# 10
haré un post con los cambios al respecto.
Si tienes que construir una librería, la cual va a ser utilizada tanto por .NET Core, como .NET o incluso .NET Framework puedes utilizar .NET Standard y dependiendo de la versión que quieras dar soporte, tendrás que elegir una versión u otra.
Por ejemplo .NET Standard 2.0 es compatible tanto con .NET 5, como con .NET Core 2.0 o superior o incluso con .NET Framework 4.6.1.
Finalmente si lo que buscas es aplicaciones móviles o de escritorio vas a tener o bien que elegir xamarin o bien esperar hasta que salga .NET 7 ya que desgraciadamente pese a que estaba originariamente en el roadmap de .NET 6 pero por lo visto lo han tenido que retrasar.