You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不依赖Blazor等框架从C#代码直接生成.WASM模块

C# 直接生成独立 .WASM 模块的实现方案

完全不需要依赖Blazor、Uno Platform这类带完整应用栈的框架,.NET 官方原生工具链已经支持输出无上层框架依赖的独立WASM模块,可直接被前端JS环境调用,具体可行路径如下:

  • .NET NativeAOT for WebAssembly(官方推荐)
    从.NET 7版本开始官方正式支持该能力,你只需要创建普通的.NET类库项目,不需要引用任何Blazor、Uno相关的NuGet包:
    1. 给需要暴露给JS调用的C#方法加上[UnmanagedCallersOnly]特性,指定方法的导出名称
    2. 在项目文件(.csproj)中添加WASM编译相关配置,核心配置参考:
    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <OutputType>Library</OutputType>
        <PublishTrimmed>true</PublishTrimmed>
        <WasmBuildNative>true</WasmBuildNative>
        <RunAOTCompilation>true</RunAOTCompilation>
      </PropertyGroup>
    </Project>
    
    1. 执行发布命令dotnet publish -c Release -r browser-wasm,即可在输出目录拿到编译完成的独立.wasm文件,配套的JS胶水代码体积可以裁剪到几KB,完全没有Blazor带的UI、路由、状态管理之类的冗余逻辑,你可以自行编写JS层的模块加载逻辑,不需要依赖Blazor的启动脚本。
  • Mono WASM 静态编译(兼容低版本.NET)
    如果需要兼容.NET 6及更早的版本,可以使用Mono的WASM工具链,将C#编译生成的IL代码静态打包进单个WASM文件,同样不需要绑定上层应用框架。但这个方案的产物体积比NativeAOT方案大很多,裁剪优化空间有限,非必要不优先选择。
  • 轻量封装工具
    社区有不少对官方NativeAOT-WASM能力做轻量封装的工具,省去手动配置编译参数、处理导出映射的步骤,只需要标记需要对外暴露的C#方法,就能一键输出可直接在浏览器、Node.js环境加载调用的独立WASM文件,全程不会引入Blazor、Uno的框架依赖。

注意:上述方案生成的独立WASM模块默认不包含任何UI渲染相关能力,适合用来把C#编写的计算逻辑、业务规则、算法代码编译为WASM供前端调用;如果后续需要UI能力,可按需单独引入对应层,不需要在初始化阶段就创建完整的框架应用。

内容的提问来源于stack exchange,提问作者poy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 03:54:20