Trabalhando com WebAssembly e C#: do A ao Z no .NET

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que o WebAssembly está mudando as regras do jogo para desenvolvedores C#

\n\n

Por muito tempo, o desenvolvimento web foi monopólio do JavaScript. No entanto, com o surgimento do WebAssembly (Wasm), a situação mudou drasticamente. Agora, desenvolvedores C# podem compilar seu código em um formato binário que é executado no navegador com velocidade quase nativa. Isso abre enormes possibilidades: desde portar algoritmos pesados até criar aplicações SPA completas com Blazor.

\n\n

Neste artigo, vamos analisar como o WebAssembly funciona em conjunto com C# e .NET, explorar as principais ferramentas (Blazor, Wasmtime, Mono) e escrever exemplos práticos. Ao final, você será capaz de executar código C# no navegador ou no servidor usando Wasm.

\n\n

Fundamentos do WebAssembly e sua integração com C#

\n\n

O que é WebAssembly em termos simples

\n\n

WebAssembly é um bytecode de baixo nível executado em uma máquina virtual do navegador. Ele não substitui o JavaScript, mas trabalha em conjunto com ele. Principais vantagens:

\n
    \n
  • Desempenho: o código binário é executado 30-50% mais rápido que JS.
  • \n
  • Segurança: ambiente de execução isolado.
  • \n
  • Portabilidade: o mesmo arquivo .wasm funciona em Chrome, Firefox, Safari e Edge.
  • \n
\n\n

Para o ecossistema C#, o WebAssembly é implementado através de vários projetos: Blazor WebAssembly (framework para UI), Mono Wasm Runtime (executa código IL) e Wasmtime (para cenários de servidor).

\n\n

Como o C# é compilado para WebAssembly

\n\n

O processo funciona assim:

\n
    \n
  1. Você escreve código em C#.
  2. \n
  3. O compilador Roslyn o transforma em IL (linguagem intermediária).
  4. \n
  5. O Mono Runtime (ou NativeAOT) traduz o IL para WebAssembly.
  6. \n
  7. O navegador carrega o arquivo .wasm e o executa.
  8. \n
\n\n

Importante: existem duas abordagens — interpretação via Mono (mais lenta, mas mais simples) e compilação AOT (mais rápida, mas requer configuração).

\n\n

Prática: três maneiras de executar C# no WebAssembly

\n\n

1. Blazor WebAssembly — para interfaces web

\n\n

Blazor permite escrever a parte do cliente em C# em vez de JavaScript. Todo o código de UI e lógica de negócios são compilados para Wasm.

\n\n

Exemplo de um componente simples:

\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 é executado no navegador. O Blazor carrega automaticamente o Mono Wasm Runtime e seu arquivo .wasm. Para começar, crie um projeto:

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

Resultado: uma aplicação SPA completa sem uma única linha de JavaScript.

\n\n

2. Compilação direta para .wasm com NativeAOT

\n\n

Se você precisa executar uma função específica (não UI), use NativeAOT — ele compila C# diretamente para WebAssembly nativo sem o Mono Runtime.

\n\n

Passos:

\n
    \n
  1. Instale o SDK .NET 8+ e o workload: dotnet workload install wasm-tools
  2. \n
  3. Crie um aplicativo de console:
  4. \n
\n\n
dotnet new console -n WasmDemo\ncd WasmDemo
\n\n
    \n
  1. Modifique o .csproj, adicionando suporte a 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. Escreva o código:
  2. \n
\n\n
using System;\n\npublic class Program\n{\n    public static void Main()\n    {\n                

Blogs

Book Recommendations