dotnet-wasi-sdk

dotnet-wasi-sdk

实验性.NET Core WASI开发工具包,构建WebAssembly应用

dotnet-wasi-sdk是一个实验性工具包,用于将.NET Core项目构建为WASI兼容的WebAssembly文件。它包含Wasi.Sdk用于生成.wasm文件,Wasi.AspNetCore.BundledFiles用于静态文件打包,以及Wasi.AspNetCore.Server.Native用于WASI网络API支持。该SDK支持开发控制台和Web应用,可在WASI环境或自定义主机中运行。目前已被.NET SDK的wasi-experimental工作负载取代,仅供对比参考。

WASI SDK.NET CoreWebAssemblyASP.NET Core实验性项目Github开源项目

已弃用

这个实验性的 SDK 现已被 .NET SDK 的 wasi-experimental 工作负载所取代(该工作负载本身仍处于实验阶段)。请参阅 https://github.com/dotnet/runtime/blob/main/src/mono/wasi/README.md

以下内容仅供比较参考。请将您的实验迁移到使用 wasi-experimental,而不是本仓库中的包。

.NET Core 的实验性 WASI SDK

Wasi.Sdk 是一个实验性包,可以将 .NET Core 项目(包括完整的 ASP.NET Core 应用程序)构建成独立的符合 WASI 标准的 .wasm 文件。这些文件可以在标准 WASI 环境或自定义 WASI 类主机中运行。

使用方法:控制台应用程序

dotnet new console -o MyFirstWasiApp
cd MyFirstWasiApp
dotnet add package Wasi.Sdk --prerelease
dotnet build

从构建输出中可以看到,这会生成 bin/Debug/net7.0/MyFirstWasiApp.wasm

要运行它,请:

  • 确保已安装 wasmtime 并将其添加到系统 PATH
  • 通过 dotnet run 运行您的应用程序,或者如果您使用 Visual Studio,请按 Ctrl+F5

或者,您可以在命令行中手动调用 wasmtimewasmer 等运行器。例如:

  • 对于 wasmtime,运行 wasmtime bin/Debug/net7.0/MyFirstWasiApp.wasm
  • 对于 wasmer,运行 wasmer bin/Debug/net7.0/MyFirstWasiApp.wasm

其他 WASI 主机的使用方式类似。

使用方法:ASP.NET Core 应用程序

dotnet new web -o MyWebApp
cd MyWebApp
dotnet add package Wasi.Sdk --prerelease
dotnet add package Wasi.AspNetCore.Server.Native --prerelease

然后:

  • 在 Visual Studio 或 VS Code 等 IDE 中打开您的新项目

  • 打开 Program.cs 并将 var builder = WebApplication.CreateBuilder(args) 这行改为:

    var builder = WebApplication.CreateBuilder(args).UseWasiConnectionListener();
  • 打开 Properties/launchSettings.json 并编辑 applicationUrl 值,使其只包含一个 HTTP 监听器,例如:

    "applicationUrl": "http://localhost:8080"
  • 打开您的 .csproj 文件(例如,在 VS 中双击项目名称),在 <PropertyGroup> 内添加以下内容:

    <WasiRunnerArgs>--tcplisten localhost:8080 --env ASPNETCORE_URLS=http://localhost:8080</WasiRunnerArgs>

    请将 8080 替换为 Properties\launchSettings.json 中找到的端口号。

就是这样!现在您可以通过 dotnet run 运行它(或在 VS 中使用 Ctrl+F5)

可选:要添加对将 wwwroot 文件打包到 .wasm 文件中并提供服务的支持:

  • 添加 NuGet 包 Wasi.AspNetCore.BundledFiles

  • Program.cs 中,将 app.UseStaticFiles(); 替换为 app.UseBundledStaticFiles();

  • 在您的 .csproj 文件中添加:

    <ItemGroup> <WasmBundleFiles Include="wwwroot\**" /> </ItemGroup>

本仓库包含的内容

  • Wasi.Sdk - 一个使您的构建生成符合 WASI 标准的 .wasm 文件的包。它的工作原理是:
    • 下载 WASI SDK(如果您还没有)
    • 当您的常规 .NET 构建完成后,它会将生成的程序集以及预编译为 WebAssembly 的 .NET 运行时一起使用 WASI SDK 打包成一个单独的 .wasm 文件。您可以选择在编译中包含其他原生源文件,如 .c 文件。
  • Wasi.AspNetCore.BundledFiles - 提供 UseBundledStaticFiles,作为 UseStaticFiles 的替代方案,用于提供打包到 .wasm 文件中的静态文件。这允许您在 wwwroot 或其他地方有文件的情况下实现单文件部署。
  • Wasi.AspNetCore.Server.Native - 一种在 WASI 的 TCP 级标准网络 API(例如 sock_accept)上运行 ASP.NET Core 的方法。这些标准相当新,目前仅在 Wasmtime 中受支持,其他 WASI 主机不支持。

... 以及更多

从源代码构建此仓库

首先,构建运行时。这可能需要相当长的时间。

  • git submodule update --init --recursive
  • 使用 Linux 或 WSL 执行以下步骤:
    • sudo apt-get install build-essential cmake ninja-build python python3 zlib1g-dev
  • cd modules/runtime/src/mono/wasm
    • make provision-wasm(大约需要 2 分钟)
    • make build-all(需要 10-15 分钟)
      • 如果出现关于 setlocale: LC_ALL: cannot change locale 的错误,请运行 sudo apt install language-pack-en。这只会在非常基础的机器上发生。
  • cd ../wasi
    • make(需要几分钟 - 会有很多类似 "System is unknown to cmake" 的警告,这是正常的)

现在您可以构建此仓库中的包和示例:

  • 先决条件
    • .NET 7(dotnet --version 应返回 7.0.100-preview.4 或更高版本)
    • Rust 和 wasm32-unknown-unknown 目标(技术上只有 CustomHost 包需要)
  • 只需对任何示例或 src 项目使用 dotnet builddotnet run,或在 VS 中打开解决方案并对任何示例项目使用 Ctrl+F5

编辑推荐精选

堆友

堆友

多风格AI绘画神器

堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。

图像生成AI工具AI反应堆AI工具箱AI绘画GOAI艺术字堆友相机AI图像热门
码上飞

码上飞

零代码AI应用开发平台

零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具酷表ChatExcelAI智能客服AI营销产品使用教程
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

AI辅助写作AI工具AI论文工具论文写作智能生成大纲数据安全AI助手热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

下拉加载更多