Novedades de ASP.NET Core
Introducción
ASP.NET existe desde 2002 y se han introducido muchos cambios en el framework desde su primera versión. Es importante recordar una cosa sobre ASP.NET Core: la nueva plataforma web de Microsoft no es en absoluto una continuación de la versión 4.6 del framework que ya conocemos, sino más bien una renovación que debería marcar una nueva era para la tecnología de Microsoft en la Web moderna.
Algunos dirán que el framework no ha cambiado tanto (especialmente la parte MVC), pero es realmente ’bajo el capó’ donde los cambios han sido más profundos, empezando por el espacio de nombres System.Web, que ya no existe. A continuación, anunciado como multiplataforma, ASP.NET Core es más modular que en años anteriores. A través de NuGet para los componentes del servidor y después a través de Grunt o Gulp para la parte cliente del sitio web, el nuevo framework también se beneficia de un nuevo runtime, llamado CoreCLR, que permite ejecutar una aplicación web de Microsoft en Linux o Mac.
Nuevas herramientas de código abierto
ASP.NET Core viene con toda una nueva gama de herramientas de código abierto para gestionar nuevos proyectos web. Afortunadamente para los desarrolladores, todas estas herramientas se han reunido en una única interfaz de línea de comandos: dotnet.
1. El entorno de ejecución dotnet
dotnet ha sido diseñado para que las aplicaciones .NET funcionen en plataformas Windows, Mac y Linux, sin tener que desarrollar un runtime distinto para cada una de ellas. Es tanto un entorno de ejecución como un SDK, con todo lo necesario para hacer funcionar aplicaciones web ASP.NET multiplataforma.
Totalmente orientado package-first, Microsoft ha llevado el concepto de modularidad un paso más allá, permitiendo incluso que el entorno de ejecución incorpore, gestione y cree automáticamente los paquetes que necesita a través de NuGet. dotnet se puede usar en diferentes frameworks (.NET Core o el framework .NET Full) y generar paquetes NuGet directamente. Además, dotnet incluye el nuevo motor de ejecución CoreCLR, diseñado específicamente para los problemas de compatibilidad en otras plataformas.
dotnet está integrado en Visual Studio 2015 para ofrecer una experiencia más rica al desarrollador, pero el entorno de ejecución también se puede controlar desde la línea de comandos. En un proyecto ASP.NET Core, puede añadir herramientas de Microsoft y utilizar dotnet para controlar el proyecto desde la línea de comandos. Estas herramientas se añaden al mismo tiempo que el paquete NuGet en el archivo .csproj:
<ItemGroup>
<DotNetCliToolReference Inclu-de="Microsoft.VisualStudio.Web.
CodeGeneration.Tools" Version="2.0.4" />
<DotNetCliToolReference Include="BundlerMinifier.Core"
Version="2.0.238" />
</ItemGroup>
Los comandos declarados se pueden utilizar, por ejemplo, para...
La estructura de una solución
Una solución ASP.NET Core es la base de un proyecto web que utiliza tecnologías Microsoft. Permite desplegar rápidamente un sitio y estructurar el código utilizado para ejecutar la aplicación. Una solución puede incluir código tanto del lado del servidor como del lado del cliente, a la vez que incluye mecanismos para separar ambas partes. Este capítulo examinará los diferentes componentes de una solución ASP.NET Core y explicará sus funciones en la configuración o despliegue de la aplicación web.
1. Archivos .csproj
Un proyecto ASP.NET Core implementa una nueva filosofía de diseño de aplicaciones web de Microsoft que se inspira en gran medida en el código abierto.
La nueva plantilla tiene este aspecto:
Nueva plantilla de proyecto ASP.NET Core
Lo primero que hay que saber es que la disposición de los proyectos en la solución no es fija. De hecho, mediante un sistema de referencia, es muy fácil modificar la ubicación de los proyectos para seguir sus propias convenciones de nomenclatura y estructura. Un proyecto básico ASP.NET Core MVC se compone de los siguientes elementos:
-
Una solución: es el vínculo entre todos sus proyectos. El archivo .sln permite agrupar en un único archivo toda la información importante sobre sus proyectos: nombre y ruta del proyecto, configuración de compilación del proyecto (Debug, Release, etc.). También reúne diversa información contextual sobre la solución, como la versión mínima de Visual Studio necesaria para abrir el proyecto. El formato del archivo es muy similar a YAML.
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28010.2016
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") =
"MiAplicacion", "MiAplicacion\MiAplicacion.csproj",
"{GUID-PROJET}
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU ...
La configuración
La noción de configuración está muy presente en los nuevos proyectos ASP.NET Core. Configurar correctamente un proyecto significa asegurarse de que contiene los paquetes y la información necesarios para que funcione correctamente y, de esta manera, evitar incluir otras librerías que no sean útiles.
Los datos de configuración se pueden almacenar en archivos dedicados, utilizando proveedores predeterminados o los desarrolladores pueden crear sus propios proveedores y almacenar su configuración en una base de datos, por ejemplo. ASP.NET Core ofrece varias formas de manipular estos datos de configuración, que exploraremos en las siguientes secciones.
1. Archivos de configuración
En versiones anteriores, el sistema de configuración utilizaba el namespace System.Configuration junto con un archivo XML llamado web.config para almacenar la información de configuración del proyecto (cadenas de conexión, información de registro, etc.). El nuevo sistema incluido en ASP.NET Core ha sido completamente reestructurado, ofreciendo un nuevo modelo de configuración basado en claves/valores a los que se puede acceder muy fácilmente desde la aplicación o frameworks utilizados.
// Añadir la clave en el provider
provider = new MemoryConfigurationProvider();
provider.Add("unaClave", "unValor");
var config = new ConfigurationBuilder()
.Add(provider)
.Build();
// Recuperación del valor
string setting2 = config["unaClave"];
Los archivos de configuración incluidos en la solución son la mejor forma de que ASP.NET Core almacene la información de configuración. Pueden estar en formato JSON, XML o INIT y están organizados en secciones, lo que permite jerarquizar la información. Cada formato tiene su propio proveedor en el API y es posible añadir su propio proveedor personal. Es imprescindible configurar al menos un proveedor para que el API de configuración funcione. Por defecto, la plantilla de Visual Studio utiliza un archivo en formato...
Gestión de dependencias
Las dependencias de un proyecto son esenciales, ya que permiten enriquecer la aplicación con nuevas funcionalidades que no necesariamente se incluyen de serie. ASP.NET Core no es una excepción a la regla y ofrece una serie de potentes herramientas para gestionar las dependencias del proyecto de la forma más eficaz posible, ya sea en el lado del servidor o en el del cliente. De hecho, las dependencias de cada lado de la aplicación no son las mismas. El servidor utiliza dependencias del sistema muy orientadas al negocio o a las bases de datos, mientras que los clientes tienden a utilizar modernas librerías o componentes gráficos de interfaz de usuario.
1. Gestión del servidor
La política de Microsoft en materia de gestión de dependencias del lado del servidor es muy sencilla: recomienda el uso del gestor de paquetes NuGet. La versión 3 de NuGet aporta una serie de importantes novedades que han estabilizado el gestor de paquetes y lo han hecho más utilizable. Estos cambios se han guiado por los comentarios de la comunidad de Microsoft.
El primer gran cambio de NuGet se refiere a su interfaz gráfica, que ha sido completamente reescrita. Los elementos más notables son:
-
Mejor integración del gestor de paquetes en Visual Studio: ahora es una pestaña propiamente dicha, lo que nos permite seguir trabajando junto a él.
-
NuGet ahora le permite elegir qué versión instalar, dándole un mejor control sobre las versiones de los paquetes instalados. Esto hace que sea fácil volver atrás si una nueva versión hace demasiados cambios.
-
El gestor también permite especificar qué directorios (en línea o locales) utiliza NuGet para recuperar paquetes.
-
Un indicador permite ver inmediatamente, en cualquier parte de NuGet, qué paquetes se han actualizado.
-
Se ha eliminado el botón "Update all" de la versión antigua de NuGet, para evitar que el desarrollador tenga demasiados cambios de bloqueo llegando a la vez al proyecto.
Con ASP.NET, la gestión de paquetes va más allá del simple uso de NuGet. Los nuevos proyectos incluyen ahora un nuevo archivo llamado project.json para gestionar las dependencias del proyecto (véase Estructura de una solución para más detalles sobre la estructura del archivo...
Gestión de tareas
En versiones anteriores de ASP.NET, el framework .NET automatizaba ciertas tareas de forma transparente, sin que el desarrollador tuviera que describir todo el proceso. Este era el caso, en particular, de la minimización y concatenación de archivos JavaScript y CSS. Hoy en día, estos "atajos" ya no existen, y los desarrolladores tienen que contentarse con ciertas herramientas para escribir ellos mismos los distintos procesos que necesitan. Estas herramientas ofrecen un abanico mucho más amplio de posibilidades, como compilar archivos Typescript o Less, copiar archivos, instalar librerías externas, generar paquetes, etc. Las herramientas más populares en la actualidad son Grunt y Gulp y, en las siguientes secciones, se describirán sus principales características, acompañadas de varios ejemplos a modo de ilustración.
1. Tareas con Grunt
Grunt es un paquete Node.js, como Gulp y se describe comúnmente como un JavaScript Task Runner, es decir, una herramienta capaz de crear y gestionar tareas automatizadas en JavaScript. Este tipo de herramienta tiene múltiples ventajas. En primer lugar, permite a cualquier desarrollador con un mínimo conocimiento de JavaScript crear sus propios procesos de minimización, compilación, despliegue, etc., teniendo un control total sobre lo que sucede. En segundo lugar, la automatización de estas tareas garantiza que cada proceso se ejecute en el momento adecuado y siempre de la misma manera. Por último, JavaScript Task Runner se utilizan ahora ampliamente en el desarrollo web front-end, y se benefician de una comunidad amplia y creciente. Las posibilidades que ofrecen este tipo de herramientas se pueden ampliar hasta el infinito.
En términos prácticos, Grunt es simplemente un paquete NPM y el comando para instalarlo es el siguiente:
$ npm install grunt --save-dev
La opción --save-dev añade grunt al archivo package.json del proyecto web.
Visual Studio vuelve a ayudar a los desarrolladores si desean modificar directamente el archivo package.json, con autocompletado y restauración automática del paquete al guardar el archivo.
Para utilizar Grunt, ahora tenemos que crear un archivo gruntfile.js que definirá todas las tareas que se pueden utilizar en el proyecto.
module.exports = function(grunt) {
...