Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=e974c7de-a7d2-40df-a9a3-85e0f05b9c17

Plataforma .NET, Plataforma .NET Core y Xamarin: el panorama de las tecnologías de desarrollo Microsoft en 2018

Imagen ornamental - La maraña de .NET en 2018

Ya han pasado dos años desde que se empezó a hablar públicamente sobre .NET Core, y poco más de 1 año desde que se lanzó la versión 1.0 de la nueva plataforma (apareció el 28 de junio de 2016). El mes pasado Microsoft lanzó, por fin, la versión 2 de .NET Core, ofreciéndonos una segunda encarnación más robusta y completa de la nueva tecnología.

A pesar de todo este tiempo, aún hoy en día sigue habiendo una gran confusión en torno a todo lo que tiene que ver con la plataforma, sus versiones, sus compatibilidades, etc... En este periodo hemos escrito varios artículos tratando de explicar estas cosas y orientar a los que lo necesitaran. No sin dificultad porque, sobre todo en 2015, las cosas no estaban claras ni siquiera internamente en Microsoft, y la cuestión pegó muchos bandazos.

Ahora que ya tenemos una versión madura (la 2.0) de la plataforma ¿en qué estado están las cosas? ¿Qué debemos esperar de cara a finales de 2017 y principios de 2018 en lo que respecta a las tecnologías de desarrollo de .NET? ¿Cuál es el panorama actual?

¿Es una tecnología, son dos o quizá más?

Aunque son muy parecidas, comparten lenguajes, clases y funcionalidad, se trata de dos tecnologías totalmente diferentes. De hecho podríamos hablar en realidad de 3 tecnologías de desarrollo de Microsoft, si incluimos a Xamarin, que también está basado en .NET pero tiene su propia implementación multi-plataforma basada en Mono.

Por lo tanto ahora mismo existen 3 stacks tecnológicos separados, que a pesar de compartir muchos conceptos, son tecnologías diferentes y paralelas:

Diagrama esquemático de las distintas plataformas de Microsoft: .NET, .NET Core y Xamarin

La plataforma .NET 4.x

.NET logo

También conocida como .NET "Full Framework" o .NET "Tradicional".

Se trata de la plataforma .NET "de toda la vida", aparecida oficialmente en 2001. Monolítica (instalas todo su núcleo o no instalas nada), pero tremendamente capaz, ya que con ella puedes crear aplicaciones de cualquier tipo: de consola, de escritorio, para la web, móviles... Casi cualquier cosa que puedas imaginar.

Eso sí, se trata de aplicaciones que se ejecutarán solamente sobre Windows.

En la actualidad va por su versión 4.7 (lanzada en Abril de 2017, con Visual Studio 2017), y existen miles de componentes de terceros para poder extenderla.

Con ella puedes utilizar también infinidad de lenguajes de programación: C#, Visual Basic .NET, F#, C++, Python... ¡Hasta Cobol!

La utilizan miles de empresas en todo el mundo. No va a cambiar mucho en los próximos años.

La plataforma .NET Core

.NET Core logo

Es una nueva plataforma, escrita desde cero con varios objetivos en mente, siendo los principales:

  • Más ligera y "componentizable": de modo que con nuestra aplicación se distribuya exclusivamente lo que necesitemos, no la plataforma completa.
  • Multi-plataforma: las aplicaciones que creemos funcionarán en Windows, Linux y Mac, no solo en el sistema de Microsoft.
  • Alto rendimiento: no es que .NET tradicional no tuviese rendimiento, pero es que .NET Core está pensada desde el principio con esto en mente. .NET Core tiene un desempeño más alto que la versión tradicional, lo cual es muy importante para entornos Cloud, en donde esto se traduce en mucho dinero al cabo del tiempo.
  • Pensada para la nube: cuando .NET se diseñó a finales de los años 90 el concepto de nube ni siquiera existía. .NET Core nace en la era Cloud, por lo que está pensada desde el principio para encajar en entornos de plataforma como servicio y crear aplicaciones eficientes para su funcionamiento en la nube (sea de Microsoft o no).

En este artículo de nuestro tutor José María Aguilar puedes leer más sobre cuáles fueron los motivos de crear .NET Core y qué beneficios se obtienen.

Con .NET core, hoy por hoy, solo podemos crear aplicaciones de consola, aplicaciones Web (con ASP.NET Core y ASP.NET Core MVC), y aplicaciones universales de Windows para Windows 10 o posterior.

En cuanto a los lenguajes disponibles, podremos utilizar C#, F# y Visual basic .NET.

Hoy en día existen todavía bastantes menos componentes de terceros (bibliotecas y similares) para .NET Core que para .NET tradicional. Se está tratando de solucionar con .NET Standard y un shim para unificar bibliotecas que intenta conseguir que sea más fácil crear bibliotecas para ambas plataformas, pero todavía no están a la misma altura.

En el momento de escribir esto .NET Core va por su versión 2.0, aparecida en agosto de 2017. Se trata a estas alturas de una tecnología estable y dotada de funcionalidad, que nos permitirá crear aplicaciones de gran capacidad y multi-plataforma. Es decir, podemos crear una aplicación web con .NET Core que se ejecute bajo un servidor NGinx en Linux, aprovechando las ventajas que nos da esa plataforma, y acto seguido ponerla a andar en paralelo en un sistema con Windows Server 2016 e IIS en Windows, con una ganancia de rendimiento importante frente a una aplicación creada con ASP.NET MVC 5.

.NET Core 2.1 se espera para el primer trimestre de 2018. Se habla de que traerá de vuelta a los AppDomains, que se portarán más APIs y que, con suerte, se lanzará con .NET Standard 2.1 para acercarla cada vez más a las capacidades de la plataforma .NET completa.

Xamarin

Xamarin logo

Xamarin nació como un proyecto Open Source hace muchos años llamado Mono, que trataba de llevar .NET a todas las plataformas en los tiempos en los que Microsoft se negaba a sacar .NET de Windows (hoy en día parece increíble, pero así era). Posteriormente su creador el mexicano Miguel De Icaza (creador también de GNome, el famoso escritorio para Linux) desarrolló lo que hoy en día se conoce como Xamarin, construyendo sobre Mono toda la tecnología para la creación de aplicaciones nativas para móviles en todas las plataformas (iOS, Android y Windows Mobile).

En la actualidad Xamarin se puede usar para crear aplicaciones en muchas otras plataformas incluyendo (y sobre todo) Mac, pero también Windows (mediante UWP), Apple Watch, Android Wear, Apple TV, etc.... En los próximos meses además se podrán crear aplicaciones de escritorio para Linux, proyecto en el que, por cierto, participa nuestro tutor Javier Suárez Ruiz.

Microsoft compró Xamarin a principios del año pasado. Lo ha hecho totalmente gratuito y lo ha incluido en su Visual Studio, tanto para Windows como para Mac. Esto ha disparado el uso de esta tecnología que se ha convertido en la tercera plataforma de desarrollo de Microsoft.

En muy poco tiempo Xamarin se ha postulado como la gran alternativa de desarrollo para casi todo excepto la web.

En Xamarin se debe programar con el lenguaje C#, y posee un ecosistema de componentes y extensiones de terceros que es excepcional.

Tecnologías relacionadas

Alrededor de .NET existen multitud de tecnologías relacionadas que dependen del tipo de aplicaciones que vayamos a crear, como por ejemplo:

  • ASP.NET: la base para crear aplicaciones Web basadas en .NET, con múltiples capas por encima como Web Forms, MVC, Web API o Web Pages en el caso de .NET tradicional.
  • Entity Framework: la tecnología de acceso a datos ORM (Object Relational Mapping) de Microsoft.
  • WPF (Windows Presentation Foundation), para crear interfaces de usuario.

Dado que .NET Core permite crear aplicaciones web y para la UWP, y esta última solo sirve para Windows, podemos decir que lo que nos ofrece .NET Core por encima de la plataforma base es fundamentalmente Entity Framework Core (para acceso a datos, y con diferencias respecto a Entity Framework "tradicional"), y ASP.NET Core (para desarrollo web). ASP.NET Core ofrece una serie de funcionalidades adicionales por encima, como MVC, Razor Pages (una nueva característica que ha aparecido con .NET Core 2 para crear fácilmente páginas dinámicas y que ya veremos si cuaja o no) y SignalR que todavía no es más que una versión "alpha" y tardará bastante tiempo todavía en aparecer en Core de manera oficial.

Dicho esto, el siguiente diagrama comprara .NET y .NET Core en aquello que tienen en común, es decir, el acceso a datos con Entity Framework y el desarrollo de aplicaciones web:

Mapa de tecnologías .NET 2017-2018

Nota: En este gráfico he unido con flechas discontinuas ASP.NET Core y EF Core con el Full Framework tradicional porque se pueden utilizar también desde ahí, aunque hay que tener en cuenta que en ese caso las aplicaciones resultantes no serán multiplataforma, y no tendrán acceso a la misma funcionalidad que con las ediciones tradicionales.

Como vemos ambas se parecen mucho, pero en el caso de .NET Core SignalR todavía no está disponible (se espera aún para el año que viene, casi con toda seguridad con .NET Core 2.1 en el primer trimestre). Otras tecnologías más antiguas como Web Forms no están disponibles ni nunca lo van a estar, y las recién estrenadas "Razor Pages" tratan de sustituir a las "Web Pages" tradicionales que en cualquier caso nunca tuvieron demasiado tirón.

Para crear aplicaciones Web ASP.NET MVC 5 y ASP.NET Core MVC, a pesar de compartir el nombre y por supuesto muchos conceptos, son tecnologías diferentes para las cuales hay que aprender características y formas de trabajar muy diferentes, por lo que el cambio de una a otra no es directo.

En lo que respecta a Web API, la tecnología para crear servicios REST con .NET, en la plataforma tradicional era una biblioteca externa y en .NET Core viene incluido de serie con ASP.NET Core MVC. Además han cambiado algunas cosas, simplificando de hecho el desarrollo.

En resumen

En el ámbito de tecnologías de desarrollo de Microsoft existen básicamente 3 opciones:

  • La plataforma .NET tradicional, con la que podemos crear todo tipo de aplicaciones. Estable, muy utilizada y con pocos cambios en el horizonte.
  • La plataforma .NET Core: la tecnología de futuro de Microsoft. Ya en su versión 2 y estabilizada, poco a poco irá tomando cuota de mercado y será más y más utilizada, aunque de momento va por detrás de la anterior. Multiplataforma y utilizada sobre todo a desarrollo Web.
  • Xamarin: la última adquisición pero con muchos años de historia detrás. Permite crear aplicaciones multi-plataforma sobre todo pensando en desarrollo para móviles (iOS, Android), pero también para Mac, Windows 10 y en breve para Linux. En muy poco tiempo ha crecido como la espuma.

Las tres usan como lenguaje común C#, comparten muchos conceptos, clases y técnicas, por lo que se pueden reutilizar en unas gran parte de los conocimientos que adquiramos en las otras.

Con .NET Standard Microsoft está tratando de unificarlo todo de cara al futuro: .NET framework (tradicional), .NET Core, Mono, Xamarin, UWP... de modo que al final tengamos un subconjunto común que nos permita intercambiar bibliotecas y funcionalidad entre todas las plataformas. Ese es el gran reto a medio plazo.

Si tienes interés en aprender alguna de estas plataformas te podemos ofrecer:

Además puede interesarte:

José Manuel Alarcón Director de campusMVP, es ingeniero industrial y especialista en consultoría de empresa. Ha escrito diversos libros, habiendo publicado hasta la fecha cientos de artículos sobre informática e ingeniería en publicaciones especializadas. Puedes seguirlo en Twitter en @jm_alarcon o leer sus blog técnico o personal. Ver todos los posts de José Manuel Alarcón

No te pierdas ningún post

Únete gratis a nuestro canal en Telegram y te avisaremos en el momento en el que publiquemos uno nuevo.


La mejor formación online para desarrolladores como tú

Comentarios (6) -

Alberto Chirinos
Alberto Chirinos

Excelente articulo, clarifica en gran medida lo que se está moviendo en cuanto a desarrollo con tecnologías Microsoft. Sin embargo me pregunto: ¿Para Full Framework / .NET Tradicional no se está trabajando en nuevas actualizaciones / versiones?  ¿Todo el esfuerzo (o la mayoría) se enfoca ahora en .NET Core?

Responder

José Manuel Alarcón
José Manuel Alarcón

Hola Alberto:

Hoy en día es así, sí. .NET tradicional está estabilizado y durará muchos años, pero el futuro a medio/largo plazo es Core (aunque a las empresas le cueste adaptarse y vaya todavía lento).

Saludos y gracias por comentar.

Responder

Grandioso artículo que aclara mucho sobre la plataforma, etcétera.

Me queda la duda de la plataforma y tecnologías para desarrollar aplicaciones:

Visual Studio 2017 Community Edition
SQL Server Developer Edition
.NET Core SDK 2.0.2 with .NET Core 2.0.0 - x64 SDK Installer

Entiendo que Visual Studio 2017 Community Edition no instala el NET Core 2.0.0, y requiere instalable aparte. .NET Core 2.0.0 sólo se puede utilizar con VS 2017 ? o con un VS 2013 y VS 2015 en Windows 7 ?

Aparte de esto, una reflexión sobre lo citado en el artículo:

"una gran confusión en torno a todo lo que tiene que ver con la plataforma, sus versiones, sus compatibilidades, etc..."

"Aplicaciones con .NET "Full Framework", se ejecutarán solamente sobre Windows.

Aplicaciones .NET core, para aplicaciones de consola, aplicaciones Web (con ASP.NET Core y ASP.NET Core MVC), y aplicaciones universales de Windows para Windows 10 o posterior.

Es decir, podemos crear una aplicación web con .NET Core que se ejecute bajo un servidor NGinx en Linux, aprovechando las ventajas que nos da esa plataforma, y acto seguido ponerla a andar en paralelo en un sistema con Windows Server 2016 e IIS en Windows, con una ganancia de rendimiento importante frente a una aplicación creada con ASP.NET MVC 5.

Hoy en día existen todavía bastantes menos componentes de terceros (bibliotecas y similares) para .NET Core que para .NET tradicional. Se está tratando de solucionar con .NET Standard y un shim para unificar bibliotecas que intenta conseguir que sea más fácil crear bibliotecas para ambas plataformas, pero todavía no están a la misma altura."


Entiendo que una aplicación Web hecha con .NET "Full Framework" - ASP.NET MVC 5, que sólo puede desplegarse en IIS (Windows), tiene menos rendimiento que una aplicación .NET Core 2 hecha en ASP.NET Core 2 MVC y desplegada igual en IIS (Windows).

En esta confusión, surgen muchas dudas (desde mi ignorancia claro):

¿Conllevará con el tiempo a la desaparición de .NET "Full Framework" (al menos para la Web) ? Futuro de WebForms, WebPages, MVC ,WCF, WebApi, SignalR ?
Quedará .NET "Full Framework"  para desarrollos exclusivos de Windows: Windows Forms, WPF

Acceso a datos EF con .NET "Full Framework" o con NET Core?

La última versión de ASP.NET es ASP.NET 4.X ? Vendrá ASP.NET 5 (Antes se llamó ASP.NET 5 lo que ahora es ASP.NET Core)?

ASP.NET Core MVC tiene Web API ? WCF no está incluido en NET Core?

ASP.NET MVC 5 es sobre ASP.NET 4.X ? Por otro lado, tenemos ASP.NET Core 2 MVC


Buceando por la red encontramos un artículo de Rick Stalh sobre NET Standard:

weblog.west-wind.com/.../NET-Standard-20-Making-Sense-of-NET-Again

".NET Standard is a specification, not an implementation"

Algún comentario dice "Unfortunately, I still do not understand why everyone keeps saying that Net Standard is not an implementation, when everything I see in VS 2017 says Net Standard is an implementation.

So, when I create a Net Standard class library in VS 2017, I can compile it, link to it, and run the code. I can link to the Net Standard DLL from a Net Core app, or a Net Framework app. "

Podemos ver el "lado oscuro" de ASP.NET Core en los despliegues y más detalles:
fpnotebook.wordpress.com/.../

weblog.west-wind.com/.../Publishing-and-Running-ASPNET-Core-Applications-with-IIS

weblog.west-wind.com/.../NET-Core-20-and-ASPNET-20-Core-are-finally-here

Y también cierta confusión con project.json respecto al nuevo formato de .csproj ("if you migrate a project from project.json to the new .csproj format..")


Espero encontrar alguna buena referencia que aclare nítidamente toda la confusión con la plataforma, sus versiones, sus compatibilidades, despliegues, tools, ...

Gracias por sus excelentes artículos. Son buena buena base.

Responder

José Manuel Alarcón
José Manuel Alarcón

Hola Kique:

Buff, cuántas cosas... A ver si puedo contestarlas.

1.- .NET Core 2.0 viene incluido de serie con la última actualización de VS2017. Si no lo tienes instalado del todo, hazlo. Se puede utilizar con lo que quieras, hasta con el bloc de notas y la línea de comandos, pero si quieres las facilidades que te da Visual Studio tiene que ser con la versión 2017 actualizada al máximo. Otro buen entorno para desarrollar con Core es VS Code.

2.- Sí, es correcta la apreciación. Puedes ejecutar la misma app en Linux con NGinx y en Windows con IIS y ganará rendimiento.

3.- No creo que desaparezca .NET tradicional. Sería un error de dimensiones bíblicas, pero no creo que avance mucho más. De todos modos ahora la tendencia es a unificarlo todo con .NET Standard y que sea todo compatible.

4.- Acceso a datos con ambos. Son cosas diferentes aunque parecidas. Si usas Core, con EF Core, claro.

5.- No veremos ASP.NET 5 "Tradicional". Será todo Core avanzando.

6.- WCF está para .NET Core: https://github.com/dotnet/wcf/releases
Lo que desconozco es qué grado de implementación tiene. Tendrás que investigarlo. Yo no controlo WCF y jamás me ha gustado ni un pelo.

7.- Sí, creí que eso quedaba claro en el artículo:
    - MVC 5 -> .NET 4.x
    - Core MVC 2 --> .NET Core 2.x

8.- Para aclarar cosas mucho más particulares de la mano de un verdadero experto en esta plataforma, por supuesto te recomiendo nuestro curso ;-)

www.campusmvp.es/.../...SP.NET-Core-2-MVC_227.aspx

No encontrarás nada mejor ni más actualizado, y de la mano del principal experto de habla hispana: José María Aguilar.

Saludos!

Responder

Leandro Perez Guio
Leandro Perez Guio

Saludos:

Gracias por tan espectacular y clarificante artículo. Me acaba de salvar la vida ahora que se están definiendo nuevas líneas de desarrollo en la empresa.

Gracias por tan magnífico artículo.

Saludos desde Cuba

Responder

rosesbyrosex
rosesbyrosex

Me quedó muy claro el panorama actual de la plataforma .NET, excelente redacción y buen enfoque.

Responder

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.