本計劃在 .NET 8 中推出的 WASI 已推遲到 .NET 9,請參閱 Github 上的 WASI 跟蹤問題。 在.NET 8 Preview 4 開始支援生成與 WASI 相容的 .wasm 檔案,使用獨立的 WebAssembly 執行時 Wasmtime CLI[1] 執行該檔案。
去年的文章 在 .NET 7上使用 WASM 和 WASI [2]介紹了 WebAssembly WASI的支援最早在Steve Sanderson 個人倉庫 SteveSandersonMS/dotnet-wasi-sdk 開始引入,接著正式引入到 dotnet/dotnet-wasi-sdk, 目前這部分工作已經引入到dotnet/runtime 的WASI 跟蹤問題 [3]。 Steve Sanderson 在Youtube影片 [4]解釋瞭如何獲得單個 wasm 檔案,.NET 8 新增了一個新的“wasi-experimental”工作負載,取代了早期的 Wasi.Sdk。這是為伺服器端 WebAssembly 方案提供 .NET 本機內建支援的一個步驟。他還展示了幾個令人興奮的使用示例。
鑑於WASI的位元組碼聯盟 WebAssembly:面向開發人員的更新路線圖[5],因為WASI預覽版2和3非常有可能會引入重大變化,這對於.NET 對WASI的支援非常有意義。WebAssembly(Wasm)生態系統正在轉型。開發人員可以期待一個模組化、可虛擬化且強大的環境來構建應用程式、庫和服務。
我們來看一看在.NET 8 下面如何使用WASI。
.NET SDK: .NET 8.0 RC1
dotnet cli : .NET WebAssembly Build Tools
.NET workloads:
- wasi-experimental
- wasm-experimental
- wasm-tools (來自 Visual Studio)
Wasmtime CLI: 透過MSI 安裝了14.0 版本
示例程式參考:wasiconsole-hello-world[6]
相關連結:
- [1]Wasmtime CLI:https://github.com/BytecodeAlliance/wasmtime
- [2]在 .NET 7上使用 WASM 和 WASI :https://www.cnblogs.com/shanyou/p/16861459.html
- [3]WASI 跟蹤問題 :https://github.com/dotnet/runtime/issues/65895
- [4] Experiments with the new WASI workload in .NET 8 Preview 4:https://www.youtube.com/watch?v=gKX-cdqnb8I
- [5]WebAssembly:面向開發人員的更新路線圖:https://bytecodealliance.org/articles/webassembly-the-updated-roadmap-for-developers
- [6]wasiconsole-hello-world:https://github.com/geffzhang/webassembly-experiments/tree/main/wasiconsole-hello-world