<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Leonardo Hidrovo</title>
    <description>The latest articles on DEV Community by Leonardo Hidrovo (@leonardo_hidrovo).</description>
    <link>https://dev.to/leonardo_hidrovo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F679607%2F167a7f51-5b18-41fa-9c3d-c9f47c836f3e.jpg</url>
      <title>DEV Community: Leonardo Hidrovo</title>
      <link>https://dev.to/leonardo_hidrovo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/leonardo_hidrovo"/>
    <language>en</language>
    <item>
      <title>Agregando la clase Startup en ASP.NET Core 6.</title>
      <dc:creator>Leonardo Hidrovo</dc:creator>
      <pubDate>Wed, 01 Dec 2021 02:12:02 +0000</pubDate>
      <link>https://dev.to/leonardo_hidrovo/agregando-la-clase-startup-en-aspnet-core-6-l67</link>
      <guid>https://dev.to/leonardo_hidrovo/agregando-la-clase-startup-en-aspnet-core-6-l67</guid>
      <description>&lt;p&gt;En noviembre del 2021, &lt;strong&gt;.NET 6&lt;/strong&gt; se convierte oficialmente en el nuevo framework de Microsoft el cual nos permite desarrollar aplicaciones que abarcan distintas áreas para direfentes plataformas. Una de esas áreas es la web con ASP.NET Core.&lt;/p&gt;

&lt;p&gt;ASP.NET Core en .NET 6 incluye algunas novedades. Una de ellas, es la nueva forma de configurar el punto de partida de las aplicaciones web. &lt;/p&gt;

&lt;p&gt;Hasta ASP.NET Core 5, el lugar elegido para escribir código de inicialización era en una clase llamada Startup. Aquí se configuraban algunos aspectos como los middlewares y la inyección de dependencias. Esta clase debía cumplir con ciertos requisitos para que el framework de ASP.NET Core pueda ejecutarse sin problemas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nuevo modelo de configuración.
&lt;/h3&gt;

&lt;p&gt;El nuevo enfoque de configuración en ASP.NET Core 6 es llamado "modelo de hosting mínimo" donde se unifica los archivos &lt;strong&gt;Startup.cs&lt;/strong&gt; y &lt;strong&gt;Program.cs&lt;/strong&gt; en un único archivo &lt;strong&gt;Program.cs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Al momento de crear una aplicación ASP.NET Core 6, nos damos cuenta de que el archivo &lt;strong&gt;Startup.cs&lt;/strong&gt; no existe. Es el archivo &lt;strong&gt;Program.cs&lt;/strong&gt; el que contiene todo el código de inicialización, inyección de dependencias, y configuración del HTTP request pipeline también conocido como midleware.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--akTH2apk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4kurossdtr10w5a6gdfj.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--akTH2apk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4kurossdtr10w5a6gdfj.PNG" alt="Program" width="763" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Reviviendo la clase Startup en el nuevo modelo de hosting mínimo.
&lt;/h3&gt;

&lt;p&gt;Personalmente creo que la clase Startup tenía gran valor porque nos permitía mantener por separado y mejor organizado la configuración de los servicios y los midlewares. A continuación veremos cómo podemos traerla de vuelta.&lt;/p&gt;

&lt;p&gt;Antes de empezar, debemos de comprobar que tenemos instalado la versión más reciente del &lt;strong&gt;.NET 6&lt;/strong&gt;. Podemos utilizar el siguiente comando en la terminal de cualquier plataforma (Windows, Linux, MacOS).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~$ dotnet --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si no lo tenemos instalado, podemos descargar el SDK &lt;a href="https://dotnet.microsoft.com/download/dotnet/6.0"&gt;aquí&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Como segundo paso, vamos a crear un proyecto en ASP.NET Core 6. En este ejemplo, crearemos una aplicación Web API. Podemos crearla utilizando Visual Studio 2022 o mediante la línea de comandos con el &lt;a href="https://docs.microsoft.com/en-us/dotnet/core/tools/"&gt;dotnet CLI&lt;/a&gt; como veremos a continuación.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~$ dotnet new wepapi -o WebApi6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este comando nos crea un proyecto de ASP.NET Core Web API en la carpeta WebApi6 el cuál también será el nombre del proyecto utilizando el framework .NET 6.&lt;/p&gt;

&lt;p&gt;Luego, crearemos un archivo llamado &lt;strong&gt;Startup.cs&lt;/strong&gt; en la raíz de nuestro proyecto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Xu5T2pQy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kmlw4omhss9y7yqmfqpz.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Xu5T2pQy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kmlw4omhss9y7yqmfqpz.PNG" alt="Startup" width="279" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con nuestro archivo Startup creado, vamos agregar código de forma similar a lo que ya teníamos en las versiones anteriores. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ChGuk8kZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kawrly3ona1zljqpv0e3.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ChGuk8kZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kawrly3ona1zljqpv0e3.PNG" alt="Startup" width="700" height="634"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agregamos un constructor que recibe como parámetro el &lt;code&gt;IConfiguration&lt;/code&gt; que nos permitirá leer configuraciones de distintos orígenes en el formato clave-valor. También agregamos un método &lt;code&gt;void&lt;/code&gt; llamado &lt;code&gt;ConfigureServices&lt;/code&gt; que recibe como parámetro el &lt;code&gt;IServiceCollection&lt;/code&gt;. Esta interfaz nos permitirá hacer uso del principio de inversion de dependencias, donde podemos hacer que nuestras clases dependan de abstracciones y no tipos concretos.&lt;br&gt;
Por último un método &lt;code&gt;Configure&lt;/code&gt; donde recibirá &lt;code&gt;IApplicationBuilder&lt;/code&gt; y &lt;code&gt;IWebHostEnvironment&lt;/code&gt; como parámetros. Este método también es de tipo &lt;code&gt;void&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Ahora, vamos a hacer un refactor de nuestro archivo &lt;strong&gt;Program.cs&lt;/strong&gt;. El código relacionado a la configuración de los servicios lo movemos al método &lt;code&gt;ConfigureServices&lt;/code&gt; de la clase &lt;strong&gt;Startup&lt;/strong&gt; y reemplazamos &lt;code&gt;builder.Services&lt;/code&gt; por &lt;code&gt;services&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Archivo &lt;strong&gt;Program.cs&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---et0hpC---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6r0jcf2wcquwdblh68vm.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---et0hpC---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6r0jcf2wcquwdblh68vm.PNG" alt="Program" width="795" height="144"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Archivo &lt;strong&gt;Startup.cs&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5gs5cHke--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9dlxe3jtng43gqpgbpyo.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5gs5cHke--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9dlxe3jtng43gqpgbpyo.PNG" alt="Startup" width="845" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Luego, movemos la sección del código referente a la configuración del HTTP request pipeline hacia el método &lt;code&gt;Configure&lt;/code&gt; de la clase &lt;code&gt;Startup&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Archivo &lt;strong&gt;Program.cs&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SPIVrCnJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qnui5puiv0hia9hcgypv.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SPIVrCnJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qnui5puiv0hia9hcgypv.PNG" alt="Program" width="417" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Archivo &lt;strong&gt;Startup.cs&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IIdrloC2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g4lbyaciuruenygingtl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IIdrloC2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g4lbyaciuruenygingtl.png" alt="Startup" width="880" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Después de copiar el código al método &lt;code&gt;Configure&lt;/code&gt;, nuestro editor nos mostrará unos errores, por lo que tendremos que hacer un pequeño refactor tal como se muestra en la imagen de arriba.&lt;/p&gt;

&lt;p&gt;¡Ahora el código de la clase &lt;code&gt;Program&lt;/code&gt; quedó más compacto!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z_-OzULI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jum5klr76rd8iaj2am7p.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z_-OzULI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jum5klr76rd8iaj2am7p.PNG" alt="Program" width="451" height="123"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por último, es necesario utilizar nuestra clase &lt;code&gt;Startup&lt;/code&gt; en la clase &lt;code&gt;Program&lt;/code&gt;. Para ello, vamos a instanciarla pasándole como parámetro &lt;code&gt;builder.Configuration&lt;/code&gt;. Luego, llamaríamos al método &lt;code&gt;ConfigureServices&lt;/code&gt; enviándo como parámetro &lt;code&gt;builder.Services&lt;/code&gt;. Después de construir la applicación con &lt;code&gt;var app = builder.Build();&lt;/code&gt;, invocamos al método &lt;code&gt;Configure&lt;/code&gt; donde pasamos como parámetros a &lt;code&gt;app&lt;/code&gt; y &lt;code&gt;app.Environment&lt;/code&gt;. Nuestro código quedaría finalmente así en la clase &lt;strong&gt;Program&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AsM85wno--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d0swsl709joloj2xygk7.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AsM85wno--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d0swsl709joloj2xygk7.PNG" alt="Program" width="471" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusión.
&lt;/h3&gt;

&lt;p&gt;A pesar de que ASP.NET Core 6 no nos proporciona la clase Startup, hemos visto un modo de cómo agregarla. Cabe mencionar que este proceso no es requerido. Es sólo una forma de cómo mantener nuestro código organizado y también puede ser de ayuda si estamos migrando desde versiones anteriores de ASP.NET Core.&lt;/p&gt;

&lt;h3&gt;
  
  
  Referencias:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-6.0"&gt;https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-6.0&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/aspnet/core/migration/50-to-60?view=aspnetcore-6.0&amp;amp;tabs=visual-studio"&gt;https://docs.microsoft.com/en-us/aspnet/core/migration/50-to-60?view=aspnetcore-6.0&amp;amp;tabs=visual-studio&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>net6</category>
      <category>startup</category>
      <category>webdev</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Iniciando en Blazor</title>
      <dc:creator>Leonardo Hidrovo</dc:creator>
      <pubDate>Fri, 20 Aug 2021 14:54:19 +0000</pubDate>
      <link>https://dev.to/leonardo_hidrovo/iniciando-en-blazor-1jm2</link>
      <guid>https://dev.to/leonardo_hidrovo/iniciando-en-blazor-1jm2</guid>
      <description>&lt;h3&gt;
  
  
  ¿Imaginas utilizar un lenguaje de programación de back-end como .NET en el lado del cliente?
&lt;/h3&gt;

&lt;p&gt;Anteriormente, cuando queríamos crear aplicaciones web que corrieran en un navegador, debíamos utilizar JavaScript como lenguaje de programación ya sea puro o utilizando algún framework como React, Angular, JQuery, entre otros. Con WebAssembly podemos utilizar otros lenguajes de programación y gracias a Blazor podemos utilizar de forma cómoda código de C# que será ejecutado en el navegador.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. ¿Qué es Blazor?
&lt;/h4&gt;

&lt;p&gt;Es un framework que nos permite crear aplicaciones web del lado del cliente usando C# como lenguaje de programación utilizando un paradigma de componentes. Estas aplicaciones se ejecutan en el lado del navegador gracias a WebAssembly. &lt;/p&gt;

&lt;h4&gt;
  
  
  2. ¿Qué es WebAssembly?
&lt;/h4&gt;

&lt;p&gt;WebAssembly o también conocido como Wasm es un estándar web que define un formato de ensamblaje para código ejecutable en navegadores web. Esta tecnología nos permite compilar el código de otros lenguajes en WebAssembly para facilitar su ejecución en el navegador a una velocidad casi nativa. En el caso de Blazor, podremos ejecutar aplicaciones .NET en el navegador. Esto es posible porque compilamos el runtime de .NET en WebAssembly. Esto permite utilizar cualquier librería de back-end (.dll) en el front-end siempre y cuando sea compatible con .NET Standard. Sin embargo, para que Wasm pueda funcionar, el navegador debe ser compatible con este lenguaje. La mayoría de los navegadores web modernos lo son. Podemos ver la compatibilidad en el siguiente enlace: &lt;a href="https://caniuse.com/wasm" rel="noopener noreferrer"&gt;https://caniuse.com/wasm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pero ¿Y si se deseamos utilizar JavaScript?, ¡Blazor lo tiene cubierto! Viene con interoperabilidad de JavaScript. Con JS Interop, una aplicación Blazor puede invocar funciones JavaScript desde métodos .NET y métodos .NET desde funciones JavaScript.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Modelos de alojamiento
&lt;/h4&gt;

&lt;p&gt;Para ejecutar aplicaciones Blazor tenemos dos modos: Blazor en el lado del cliente (Blazor WebAssembly) y Blazor en el lado del servidor (Blazor Server).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;b&gt;Blazor en el lado del cliente:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;En esta opción, la aplicación de Blazor corre en el navegador gracias a WebAssembly quitando esa carga al servidor. La desventaja podría ser la descarga inicial que puede ser de varios megas dependiendo de la aplicación.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;b&gt;Blazor en el lado del servidor:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Con esta opción, la aplicación de Blazor corre en el servidor web y el cliente interactúa con ella a través de una conexión de SignalR manejando de esta forma comunicación en tiempo real. Con esto se logra que el usuario interactúe con la aplicación de manera remota. Como ventaja tenemos que dispositivos con menos recursos pueden correr la aplicación sin problemas. Las limitaciones es que siempre debemos tener un servidor disponible para las interacciones con el usuario y puede haber latencia si la conexión de internet no es buena o si los recursos del servidor son limitados.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmf3yj3o6n7qdtanndm98.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmf3yj3o6n7qdtanndm98.PNG" alt="modos de alojamiento"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  4. ¿Por qué usar Blazor?
&lt;/h4&gt;

&lt;p&gt;Con Blazor podemos aprovechar todas nuestras habilidades en .NET y comenzar a trabajar en el desarrollo web con sólo un poco de trabajo y conocimiento adicional, permitiendo acelerar el proceso de desarrollo de manera significativa.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. Creando una aplicación de Blazor
&lt;/h4&gt;

&lt;p&gt;Antes de empezar a crear aplicaciones .NET, necesitamos tener descargado el &lt;a href="https://download.visualstudio.microsoft.com/download/pr/543144ce-10ad-4396-a464-28c440f8fe22/29bd5273237ed3a408aef1f8aacd239b/dotnet-sdk-5.0.400-osx-x64.pkg" rel="noopener noreferrer"&gt;.NET SDK&lt;/a&gt; (Software Development Kit). El link de descarga es para usuarios de MacOS aunque también están las opciones para Linux y Windows.&lt;/p&gt;

&lt;p&gt;Una vez que lo hayamos instalado, abrimos la terminal y ejecutamos el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~$ dotnet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si la instalación se realizó correctamente, deberíamos de ver un resultado similar al siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Usage: dotnet [options]
Usage: dotnet [path-to-application]

Options:
-h|--help         Display help.
--info            Display .NET information.
--list-sdks       Display the installed SDKs.
--list-runtimes   Display the installed runtimes.

path-to-application:
The path to an application .dll file to execute.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego ejecutamos el siguiente comando para crear la aplicación Blazor WebAssembly llamada BlazorApp&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~$ dotnet new blazorwasm -o BlazorApp --hosted
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El argumento &lt;code&gt;--hosted&lt;/code&gt; es opcional y en este caso nos crea adicionalmente un Web API en ASP.NET Core que nos permite servir datos a nuestra aplicación Blazor.&lt;/p&gt;

&lt;p&gt;Ahora, navegamos al nuevo directorio BlazorApp creado por el comando anterior:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~$ cd BlazorApp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego escribimos el comando &lt;code&gt;code .&lt;/code&gt; para abrir el directorio actual en Visual Studio Code. Este paso es opcional, podemos utilizar cualquier editor de código de nuestra preferencia.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~$ code .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finalmente ejecutamos el comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~$ dotnet watch run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El comando &lt;code&gt;dotnet watch run&lt;/code&gt; compilará e iniciará la aplicación, y luego recompilará y reiniciará la aplicación cada vez que realicemos cambios en el código. Podemos detener la aplicación en cualquier momento seleccionando &lt;code&gt;Ctrl + C&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Una vez que nuestro navegador se inicie, habremos ejecutado con éxito nuestra primera aplicación Blazor.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2was9kbnrdhvr5747luq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2was9kbnrdhvr5747luq.png" alt="Blazor App"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  6. Conclusión
&lt;/h4&gt;

&lt;p&gt;Debemos recordar que Blazor es todavía una tecnología en desarrollo y como tal necesita evolucionar. A pesar de que está creciendo rápidamente y se está convirtiendo en una buena opción, no reemplaza a las tecnologías actuales ni quedarán obsoletas debido a Blazor, por lo que podemos seguir usándolas con tranquilidad.&lt;/p&gt;

&lt;h4&gt;
  
  
  Referencias:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/aspnet/core/blazor/?view=aspnetcore-5.0" rel="noopener noreferrer"&gt;https://docs.microsoft.com/en-us/aspnet/core/blazor/?view=aspnetcore-5.0&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dotnet.microsoft.com/learn/aspnet/blazor-tutorial" rel="noopener noreferrer"&gt;https://dotnet.microsoft.com/learn/aspnet/blazor-tutorial&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>blazor</category>
      <category>webassembly</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
