基于 Cranelift 代码生成器的独立 WebAssembly 运行时,支持 WASI 并提供多语言嵌入接口。
zion-sati/NetWasm
将 C# 与 .NET CIL 直接编译为小体积独立 WASI Wasm 组件的编译器、运行时与 SDK。
- Star
- 233
- Fork
- 7
- 未关闭 Issue
- 6
- 最近提交
- 1小时前
这是什么?
NetWasm 将 C# 和 .NET CIL 直接编译为 WebAssembly,使用自有的编译器、CoreLib、运行时和 SDK,不携带桌面 CLR、Mono 或应用程序 DLL。编译器只处理可达代码并仅链接所需的运行时支持,输出为可由 Wasmtime 等 Wasm 宿主运行的独立 WASI Preview 2 组件,构建过程沿用常规的 dotnet CLI。
该项目面向希望获得小体积、可沙箱化 C# 程序的开发者,例如用于无服务器函数或浏览器模块。它提供三种垃圾回收策略(默认 Compact、NetWasmGC 和 Bump),可将 C# 导出发布为带类型的 JavaScript 模块并在 Web Worker 中运行,还能根据 WIT 生成 C# 绑定。支持范围限定在 .NET 的一个子集内:运行时反射、dynamic、运行时程序集加载和托管线程不在其支持范围内,项目目前仍处于 1.0 之前阶段。
核心功能
- 01将 C# 和 .NET CIL 直接编译为独立的 WASI Preview 2 组件。
- 02只链接可达代码和所需运行时支持,以保持二进制体积小。
- 03提供 Compact、NetWasmGC 和 Bump 三种垃圾回收策略。
- 04可将 C# 导出发布为带类型的 JavaScript 模块,并支持在 Web Worker 中使用。
- 05可根据 WIT 生成 C# 绑定,并支持静态 .a 原生互操作。
- 06通过标准 dotnet CLI 完成构建与测试。
适用场景
- 将小型 C# 函数部署到 WebAssembly 宿主或无服务器运行时。
- 以带类型的 JavaScript 模块形式,在浏览器页面或 Web Worker 中运行 C# 逻辑。
- 开发同时面向 NetWasm 和桌面 .NET 的可移植 C# 库。
- 评估将 C# 作为比 Blazor WebAssembly 更紧凑的 Wasm 方案。
快速上手
- 1
安装 .NET SDK 10.0.303 或更新版本
- 2
安装 NetWasm 项目模板
dotnet new install NetWasm.Templates - 3
创建新的 NetWasm 应用并运行
dotnet new netwasm-app -n HelloNetWasm - 4
将应用发布为独立的 WASI 组件
dotnet publish -c Release -o publish/local
使用前须知
- NetWasm 尚未发布 1.0 版本,次要版本之间源代码、包和 ABI 契约可能发生变化。
- 不支持运行时反射、dynamic、运行时加载程序集和托管线程。
- 通用的文件、目录、套接字和子进程 API 尚未实现。
- 发布的组件需要 Wasmtime 等 WebAssembly 宿主才能运行。
标签
常见问题
- NetWasm 是什么?
- 将 C# 与 .NET CIL 直接编译为小体积独立 WASI Wasm 组件的编译器、运行时与 SDK。 NetWasm 将 C# 和 .NET CIL 直接编译为 WebAssembly,使用自有的编译器、CoreLib、运行时和 SDK,不携带桌面 CLR、Mono 或应用程序 DLL。编译器只处理可达代码并仅链接所需的运行时支持,输出为可由 Wasmtime 等 Wasm 宿主运行的独立 WASI Preview 2 组件,构建过程沿用常规的 dotnet CLI。
- NetWasm 可以免费使用吗?用的什么许可证?
- NetWasm 以 Other 许可证开源。用于商业产品前,请先确认许可证条款。
- NetWasm 还在维护吗?
- 活跃维护中。NetWasm 最近一次提交是在 2026年10月22日。
- NetWasm 适合用来做什么?
- 将小型 C# 函数部署到 WebAssembly 宿主或无服务器运行时。 以带类型的 JavaScript 模块形式,在浏览器页面或 Web Worker 中运行 C# 逻辑。 开发同时面向 NetWasm 和桌面 .NET 的可移植 C# 库。 评估将 C# 作为比 Blazor WebAssembly 更紧凑的 Wasm 方案。
- NetWasm 怎么安装和运行?
- 安装 .NET SDK 10.0.303 或更新版本 安装 NetWasm 项目模板: dotnet new install NetWasm.Templates 创建新的 NetWasm 应用并运行: dotnet new netwasm-app -n HelloNetWasm 将应用发布为独立的 WASI 组件: dotnet publish -c Release -o publish/local
- 在哪里获取 NetWasm?
- 源代码和安装说明在 GitHub 上:https://github.com/zion-sati/NetWasm
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
基于 LLVM 的 Go 编译器,面向微控制器、WebAssembly 和命令行工具。
一个实验性的编译器,可将 TypeScript/JavaScript 编译为原生可执行文件或 WebAssembly,运行时无需 Node.js。
基于 WebAssembly 的运行时与 CLI,用于在轻量、安全的沙箱中运行应用和 AI 智能体代码。
将 C 和 C++ 代码编译为 WebAssembly,使其可在浏览器、Node.js 等环境运行的编译工具链。
一种类 TypeScript 的语言及编译器,可将带类型的 TypeScript 变体编译为 WebAssembly 模块。