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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:06:01