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

如何将动态生成的F#/C#代码编译为WebAssembly并在.NET宿主运行?

可行方案:动态生成F#/C#代码并编译为可在.NET宿主(如wasmtime)运行的WASM模块

纠正你的部分误解

  • .NET并非只能依赖Mono解释IL来运行WASM:从.NET 7开始,官方支持WASM Native AOT,可以直接将.NET代码编译为独立的WASM字节码,无需依赖Mono runtime的解释层。
  • Mono WASM也支持脱离JavaScript环境运行:现在Mono已支持WASI(WebAssembly System Interface)目标,生成的WASM模块可直接在wasmtime等通用WASM宿主中运行,不需要JS环境。

可行实现路径

路径1:使用.NET WASM Native AOT(推荐,独立WASM模块)

这是最直接的方案,能生成无需额外运行时依赖的独立WASM模块,适合动态编译小段代码的场景:

  1. 动态生成代码:用FCS(F# Compiler Service)或Roslyn(C#)将字符串代码编译为.NET IL程序集,或者直接生成代码文件(更简单,适合小段代码)。
  2. 构造临时项目:为生成的代码创建临时的.fsproj或.csproj,配置WASM Native AOT参数。
  3. 编译为WASM:通过dotnet publish命令触发Native AOT编译,生成可直接运行的WASM模块。

F#示例步骤

  • 动态生成F#代码并保存为Program.fs:
module DynamicCode
open System

// 导出供宿主调用的方法(可选,如需宿主交互)
[<System.Runtime.InteropServices.DllImport("*")>]
extern void host_print(string msg)

[<EntryPoint>]
let main args =
    host_print("Hello from dynamic F# WASM!")
    printfn "Console output from WASM"
    0
  • 创建临时DynamicCode.fsproj:
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <RuntimeIdentifier>wasm-wasi</RuntimeIdentifier>
    <NativeAotWasm>true</NativeAotWasm>
    <SelfContained>true</SelfContained>
    <!-- 若需要导出宿主可调用的方法,添加以下配置 -->
    <WasmNativeAotExportedFunctions>_host_print,_main</WasmNativeAotExportedFunctions>
  </PropertyGroup>
</Project>
  • 执行编译命令:
dotnet publish -c Release
  • 编译完成后,在bin/Release/net8.0/wasm-wasi/publish/目录下找到DynamicCode.wasm,用wasmtime运行:
wasmtime DynamicCode.wasm

路径2:使用Mono WASI目标(适合快速验证)

如果不需要Native AOT的性能优势,可直接用Mono将IL编译为支持WASI的WASM模块:

  1. 动态生成代码并编译为IL程序集(或直接生成代码文件)。
  2. 用Mono编译为WASI目标的WASM:
dotnet publish -c Release -r wasi-wasm --self-contained true

生成的WASM模块同样可在wasmtime中运行,Mono runtime会被打包进WASM模块内。

动态编译的工具链整合

  • F#:使用**FCS(F# Compiler Service)**动态将字符串代码编译为IL程序集,再结合上述.NET WASM编译流程生成WASM。
  • C#:使用Roslyn API动态编译字符串代码为IL程序集,后续编译流程与F#一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:50:24