Neu in .NET 8.0 [40]: Eigener Workload fĂĽr WASI
Das WebAssembly System Interface (WASI) wird durch Microsoft nun mit einem eigenen SDK unterstützt – aber weiterhin im Status "experimentell".

(Bild: erstellt mit KI (Dall-E) von iX)
- Dr. Holger Schwichtenberg
Das WebAssembly System Interface (WASI) ist ein Standard, um WebAssembly-Bytecode-basierte Anwendungen plattformneutral außerhalb des Webbrowsers zu betreiben. WASI wurde am 27. März 2019 erstmals öffentlich bekanntgegeben und wird in einer Untergruppe der WebAssembly-Gruppe beim W3C (World Wide Web Consortium) standardisiert.
Schon seit dem 25. März 2022 bot Microsoft eine experimentelle Implementierung für WASI-basierte Anwendungen mit .NET 7.0 – zunächst aber nur in einem GitHub-Repository eines Microsoft-Mitarbeiters.
Seit .NET 8.0 ist das Projekt als experimenteller Workload fĂĽr das .NET SDK verfĂĽgbar.
Den Workload installiert man folgendermaĂźen:
dotnet workload install wasi-experimental
Eine neue WASI-basierte Konsolenanwendung legt man danach an mit
dotnet net wasiconsole
oder in Visual Studio:
(Bild:Â Screenshot (Holger Schwichtenberg))
Folgender Code zeigt eine Konsolenanwendung, die einige Systeminformationen ausgibt:
// WASI-Demo (C) Dr. Holger Schwichtenberg, 2022
Console.WriteLine(System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription + "' sagt 'Hallo' via WebAssembly/WASI!");
Console.WriteLine("OS Description: " + System.Runtime.InteropServices.RuntimeInformation.OSDescription);
Console.WriteLine("OS Architecture: " + System.Runtime.InteropServices.RuntimeInformation.OSArchitecture);
Console.WriteLine("OS Version: " + System.Environment.OSVersion);
Console.WriteLine("Machine Name: " + System.Environment.MachineName);
Console.WriteLine("Current User: " + System.Environment.UserDomainName + "\\" + System.Environment.UserName);
Console.WriteLine("Process Path: " + System.Environment.ProcessPath);
Console.WriteLine("Current Directory: " + System.Environment.CurrentDirectory);
Console.WriteLine("Process ID: " + System.Environment.ProcessId);
Console.WriteLine("64 Bit: " + System.Environment.Is64BitProcess);
Console.WriteLine("Working Set: " + System.Environment.WorkingSet);
foreach (var d in System.Environment.GetLogicalDrives())
{
Console.WriteLine("Drive: " + d);
}
Das WASI-Projekt im folgenden Code basiert auf einer normalen .NET-8.0-Konsolenanwendung mit dem RuntimeIdentifier wasi-wasm
:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>wasi-wasm</RuntimeIdentifier>
<OutputType>Exe</OutputType>
<PublishTrimmed>true</PublishTrimmed>
</PropertyGroup>
</Project>
Beim Übersetzen (siehe nächste Abbildung) entsteht nicht nur eine DLL, sondern auch eine WebAssembly-Bytecode-Datei (.wasm), die ca. 11 MB groß ist.
Diese .wasm-Datei enthält die komplette WASI-Anwendung inklusive .NET-Laufzeitumgebung; die DLL ist zur Laufzeit ebenso wenig wie die Installation der .NET Runtime zur Ausführung notwendig. Allerdings kann man eine .wasm-Datei bisher in keinem der üblichen Betriebssysteme direkt starten; man benötigt eine WASI-Laufzeitumgebung wie Wasmtime von der Bytecode Alliance oder Wasmer.
Die nächsten Abbildungen zeigen die Ausführung mit Wasmtime, das für Windows in einer rund 10 MB großen .exe-Datei geliefert wird. Man sieht, dass die Anwendung in einer Sandbox läuft und derzeit auch noch vom Betriebssystem und Benutzer "Browser" spricht, auch wenn gar kein Browser im Spiel ist. Die Prozess-ID ist immer 42. Das WASI SDK von Microsoft erlaubt auch die Verwendung von ASP.NET Core, das heißt, man kann eine Webserver-Anwendung auf Basis von WebAssembly-Bytecode schreiben.
(Bild:Â Screenshot (Holger Schwichtenberg))
(Bild:Â Screenshot (Holger Schwichtenberg))
(Bild:Â Dmytro Vikarchuk/Shutterstock)
In der Online-Konferenz betterCode() .NET 9.0 am 19. November 2024 von iX und dpunkt.verlag präsentieren .NET-Experten von www.IT-Visions.de den fertigen Stand von .NET 9.0 anhand von Praxisbeispielen.
Dazu zählen die Neuerungen in .NET 9.0 SDK, C# 13.0, ASP.NET Core 9.0, Blazor 9.0, Windows Forms 9.0, WPF 9.0, WinUI, .NET MAUI 9.0 und die Integration von Künstlicher Intelligenz in .NET-Anwendungen.
Das Programm bietet sechs Vorträge, eine Diskussion und sechs Workshops. Tickets sind bis zum 22. Oktober zum Frühbucherpreis erhältlich.
(rme)