Arbeiten mit WebAssembly und C#: von A bis Z in .NET

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum WebAssembly die Spielregeln für C#-Entwickler ändert

\n\n

Lange Zeit war die Webentwicklung ein Monopol von JavaScript. Mit dem Aufkommen von WebAssembly (Wasm) hat sich die Situation jedoch grundlegend geändert. Jetzt können C#-Entwickler ihren Code in ein binäres Format kompilieren, das im Browser mit nahezu nativer Geschwindigkeit ausgeführt wird. Dies eröffnet enorme Möglichkeiten: von der Portierung schwerer Algorithmen bis hin zur Erstellung vollwertiger SPA-Anwendungen mit Blazor.

\n\n

In diesem Artikel werden wir untersuchen, wie WebAssembly in Verbindung mit C# und .NET funktioniert, die wichtigsten Tools (Blazor, Wasmtime, Mono) betrachten und praktische Beispiele schreiben. Am Ende können Sie selbstständig C#-Code im Browser oder auf dem Server mit Wasm ausführen.

\n\n

Grundlagen von WebAssembly und seine Integration mit C#

\n\n

Was ist WebAssembly in einfachen Worten

\n\n

WebAssembly ist ein Low-Level-Bytecode, der in einer virtuellen Maschine des Browsers ausgeführt wird. Es ersetzt JavaScript nicht, sondern arbeitet mit ihm zusammen. Die Hauptvorteile:

\n
    \n
  • Leistung: Binärcode wird 30-50% schneller ausgeführt als JS.
  • \n
  • Sicherheit: Isolierte Ausführungsumgebung.
  • \n
  • Portabilität: Dieselbe .wasm-Datei funktioniert in Chrome, Firefox, Safari und Edge.
  • \n
\n\n

Für C# wird die WebAssembly-Ökosystem durch mehrere Projekte realisiert: Blazor WebAssembly (Framework für UI), Mono Wasm Runtime (führt IL-Code aus) und Wasmtime (für serverseitige Szenarien).

\n\n

Wie C# in WebAssembly kompiliert wird

\n\n

Der Prozess sieht so aus:

\n
    \n
  1. Sie schreiben Code in C#.
  2. \n
  3. Der Compiler Roslyn wandelt ihn in IL (Intermediate Language) um.
  4. \n
  5. Die Mono Runtime (oder NativeAOT) übersetzt IL in WebAssembly.
  6. \n
  7. Der Browser lädt die .wasm-Datei und führt sie aus.
  8. \n
\n\n

Wichtig: Es gibt zwei Ansätze – Interpretation über Mono (langsamer, aber einfacher) und AOT-Kompilierung (schneller, erfordert aber Konfiguration).

\n\n

Praxis: Drei Möglichkeiten, C# in WebAssembly auszuführen

\n\n

1. Blazor WebAssembly – für Weboberflächen

\n\n

Blazor ermöglicht es, den Client-Teil in C# statt JavaScript zu schreiben. Der gesamte UI-Code und die Geschäftslogik werden in Wasm kompiliert.

\n\n

Beispiel einer einfachen Komponente:

\n
@page "/counter"\n<h3>Zähler: @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

Dieser Code wird im Browser ausgeführt. Blazor lädt automatisch die Mono Wasm Runtime und Ihre .wasm-Datei. Erstellen Sie zum Start ein Projekt:

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

Ergebnis: Eine vollwertige SPA-Anwendung ohne eine einzige Zeile JavaScript.

\n\n

2. Direkte Kompilierung in .wasm mit NativeAOT

\n\n

Wenn Sie eine bestimmte Funktion (kein UI) ausführen müssen, verwenden Sie NativeAOT – es kompiliert C# direkt in natives WebAssembly ohne Mono Runtime.

\n\n

Schritte:

\n
    \n
  1. Installieren Sie das SDK .NET 8+ und das Workload: dotnet workload install wasm-tools
  2. \n
  3. Erstellen Sie eine Konsolenanwendung:
  4. \n
\n\n
dotnet new console -n WasmDemo\ncd WasmDemo
\n\n
    \n
  1. Ändern Sie die .csproj-Datei, indem Sie die Wasm-Unterstützung hinzufügen:
  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. Schreiben Sie den Code:
  2. \n
\n\n
using System;\n\npublic class Program\n{\n    public static void Main()\n    {\n                

Blogs

Buchempfehlungen