.NET 6下无需Blazor构建最小C# WASM二进制的可行性问询
.NET 6 无Blazor依赖WASM构建方案
你提到的旧Mono公开WASM SDK已经正式整合进.NET 6官方SDK的wasm-tools工作负载中,不需要再查找旧的第三方构建产物,完全可以实现不依赖Blazor UI的最小体积WASM构建,支持JS直接调用C#代码。
前置准备
- 安装版本≥6.0.100的.NET 6 SDK
- 执行命令安装WASM构建工具:
dotnet workload install wasm-tools
最小项目配置
不要使用Blazor WebAssembly项目模板,直接创建空类库项目,修改.csproj配置如下即可完全移除Blazor相关依赖:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <RuntimeIdentifier>browser-wasm</RuntimeIdentifier> <!-- 启用原生构建裁剪 --> <WasmBuildNative>True</WasmBuildNative> <!-- 开启全量IL裁剪 --> <TrimMode>full</TrimMode> <TrimUnusedLibraries>True</TrimUnusedLibraries> <!-- 禁用调试符号减小体积 --> <DebugType>None</DebugType> </PropertyGroup> </Project>
暴露C#方法给JS调用
给需要对外暴露的公共静态方法添加[JSInvokable]特性即可,示例代码:
using System.Runtime.InteropServices.JavaScript; public class JsApi { [JSInvokable] public static string GetMessage(string input) { return $"来自C#的返回:{input}"; } }
最小体积构建
执行发布命令构建产物:dotnet publish -c Release -r browser-wasm
优化后的最小运行时产物gzip压缩后可以控制在1MB以内,无任何Blazor相关冗余代码。
JS侧调用示例
在前端页面引入构建产物中的dotnet.js,初始化运行时后即可直接调用C#方法:
// 初始化.NET WASM运行时 const dotnetRuntime = await dotnet.create(); // 调用C#方法,参数依次为程序集名、方法名、方法入参 const result = dotnetRuntime.invokeMethod("你的程序集名称", "GetMessage", "测试输入"); console.log(result);
内容的提问来源于stack exchange,提问作者eltiare
相关产品推荐
相关产品推荐

