Project Icon

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工作负载取代,仅供对比参考。

已弃用

这个实验性的 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
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

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

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号