在 WASI 上运行 .NET 7 应用程序
WASI代表 WebAssembly 系統接口,WASI 讓沙盒化的 WebAssembly 應用程序通過一系列類似 POSIX 的函數訪問底層操作系統,允許獨立于瀏覽器運行 WebAssembly 代碼。這是一個高度實驗性的項目,但同時也是一個非常有趣的項目,并且有可能為行業的大規模編程范式轉變做出貢獻,使 WebAssembly 真正無處不在。
微軟的 Steve Sanderson 最近發布了.NET 的實驗性WASI SDK for .NET的第一個版本,它允許將 .NET 7 和 ASP.NET Core 應用程序 構建為獨立的 WASI 兼容應用程序,并從 WASI 主機運行它們。Steve 的?repo?提供了在 Windows 和 Linux 上使用的簡單步驟.
我們首先要安裝 .NET 7 SDK。最新的是預覽7.0.100-preview.2并不能運行,?Steve 提交了有個PR?https://github.com/dotnet/aspnetcore/pull/40376?需要 7.0.100-preview.4以上版本修復,運行時方面的相關 PR 可以在https://github.com/dotnet/runtime/pull/67036?找到 ,考慮到所有因素,因為它已經修復,只是不是“正式可用”,所以最好的辦法是從每日構建版本https://github.com/dotnet/installer/blob/main/README.md#installers-and-binaries?安裝適用于對應操作系統的SDK,比如Windows的最新穩定版本是?https://aka.ms/dotnet/7.0.1xx/daily/dotnet-sdk-win-x64.exe,例如,我今天安裝的當前可用版本是7.0.100-preview.4.22201.11。
我們創建一個常規的基本 ASP.NET Core Web 應用程序。
dotnet new web
項目創建后,需要添加以下包引用才能引入實驗?Wasi.Sdk以及 Steve 構建的相應 ASP.NET Core 服務器實現:
<ItemGroup>
? ?<PackageReference Include="Wasi.AspNetCore.Server.Native" Version="0.1.0" />
??? <PackageReference Include="Wasi.Sdk" Version="0.1.0" />
? </ItemGroup>
除此之外,main?PropertyGroup?下的一個額外屬性?,一個與您的應用程序使用的端口 在launchSettings.json 相對應的端口:
<WasiRunnerArgs>--tcplisten localhost:5100 --env ASPNETCORE_URLS=http://localhost:5100</WasiRunnerArgs>
由于我們的應用程序需要從 WASI 主機內部偵聽網絡接口,因此需要在生成的代碼中進行額外的更改,即需要添加WasiConnectionListener() 到默認值WebApplication 構建者:
var builder = WebApplication.CreateBuilder(args).UseWasiConnectionListener();
此時應用程序將正確構建,但它還無法運行,因為我們還需要有 WASI 主機可供我們使用。
為了運行這個基于 WASI 的應用程序,我們需要一個 WASI 運行時。一個優秀的輕量級運行時是wasmtime,它恰好是這個實驗使用的那個Wasi.Sdk ,我們需要?它在 PATH 上可用。
我們應該能夠運行應用程序:
打開瀏覽器訪問?http://localhost:5100/?,我們現在應該在其中看到我們的 hello world。以一種非常壯觀的方式,我們現在有一個在 WASI 運行時中作為 WebAssembly 應用程序運行的ASP.NET Core應用程序 ,并且可以從瀏覽器訪問。
總結
以上是生活随笔為你收集整理的在 WASI 上运行 .NET 7 应用程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自己搭建一个k8s环境
- 下一篇: 朋友公司招聘用的一套C#基础面试题,10