Trabajo con WebAssembly y C#: de la A a la Z en .NET

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: por qué WebAssembly cambia las reglas del juego para los desarrolladores de C#

\n\n

Durante mucho tiempo, el desarrollo web fue un monopolio de JavaScript. Sin embargo, con la llegada de WebAssembly (Wasm), la situación cambió drásticamente. Ahora, los desarrolladores de C# pueden compilar su código en un formato binario que se ejecuta en el navegador con una velocidad casi nativa. Esto abre enormes posibilidades: desde portar algoritmos pesados hasta crear aplicaciones SPA completas con Blazor.

\n\n

En este artículo, analizaremos cómo funciona WebAssembly junto con C# y .NET, revisaremos las herramientas clave (Blazor, Wasmtime, Mono) y escribiremos ejemplos prácticos. Al final, podrá ejecutar código C# de forma independiente en el navegador o en el servidor con Wasm.

\n\n

Fundamentos de WebAssembly y su integración con C#

\n\n

Qué es WebAssembly en términos sencillos

\n\n

WebAssembly es un bytecode de bajo nivel que se ejecuta en una máquina virtual del navegador. No reemplaza a JavaScript, sino que funciona junto con él. Las principales ventajas son:

\n
    \n
  • Rendimiento: el código binario se ejecuta entre un 30-50% más rápido que JS.
  • \n
  • Seguridad: entorno de ejecución aislado.
  • \n
  • Portabilidad: el mismo archivo .wasm funciona en Chrome, Firefox, Safari y Edge.
  • \n
\n\n

Para el ecosistema C#, WebAssembly se implementa a través de varios proyectos: Blazor WebAssembly (framework para UI), Mono Wasm Runtime (ejecuta código IL) y Wasmtime (para escenarios de servidor).

\n\n

Cómo se compila C# a WebAssembly

\n\n

El proceso es el siguiente:

\n
    \n
  1. Usted escribe código en C#.
  2. \n
  3. El compilador Roslyn lo convierte en IL (lenguaje intermedio).
  4. \n
  5. Mono Runtime (o NativeAOT) traduce IL a WebAssembly.
  6. \n
  7. El navegador carga el archivo .wasm y lo ejecuta.
  8. \n
\n\n

Importante: existen dos enfoques: interpretación a través de Mono (más lento, pero más simple) y compilación AOT (más rápido, pero requiere configuración).

\n\n

Práctica: tres formas de ejecutar C# en WebAssembly

\n\n

1. Blazor WebAssembly — para interfaces web

\n\n

Blazor permite escribir la parte del cliente en C# en lugar de JavaScript. Todo el código de UI y la lógica de negocio se compilan en Wasm.

\n\n

Ejemplo de un componente simple:

\n
@page "/counter"\n<h3>Contador: @currentCount</h3>\n<button @onclick="IncrementCount">+1</button>\n\n@code {\n    private int currentCount = 0;\n\n    private void IncrementCount()\n    {\n        currentCount++;\n    }\n}
\n\n

Este código se ejecuta en el navegador. Blazor carga automáticamente Mono Wasm Runtime y su archivo .wasm. Para empezar, cree un proyecto:

\n
dotnet new blazorwasm -o MyBlazorApp\ncd MyBlazorApp\ndotnet run
\n\n

Resultado: una aplicación SPA completa sin una sola línea de JavaScript.

\n\n

2. Compilación directa a .wasm con NativeAOT

\n\n

Si necesita ejecutar una función específica (no UI), use NativeAOT — compila C# directamente a WebAssembly nativo sin Mono Runtime.

\n\n

Pasos:

\n
    \n
  1. Instale el SDK .NET 8+ y la carga de trabajo: dotnet workload install wasm-tools
  2. \n
  3. Cree una aplicación de consola:
  4. \n
\n\n
dotnet new console -n WasmDemo\ncd WasmDemo
\n\n
    \n
  1. Modifique .csproj agregando soporte para Wasm:
  2. \n
\n\n
<PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net8.0</TargetFramework>\n    <RuntimeIdentifier>browser-wasm</RuntimeIdentifier>\n    <UseNativeAot>true</UseNativeAot>\n</PropertyGroup>
\n\n
    \n
  1. Escriba el código:
  2. \n
\n\n
using System;\n\npublic class Program\n{\n    public static void Main()\n    {\n                

Blogs

Book Recommendations