中文 | English
本项目是 LeanCLR 的 Demo 项目,提供 Win64 和 H5(WebAssembly)两个平台的运行示例。
LeanCLR 是一个面向全平台的精益 CLR(Common Language Runtime)实现。LeanCLR 的设计目标是在高度符合 ECMA-335 规范的前提下,提供更紧凑、易嵌入、低内存占用的运行时,实现对移动端、H5 与小游戏等资源受限平台的友好支持。
leanclr-demo/
├── win64/ # Windows x64 平台 Demo
│ ├── run.bat # 快速运行脚本
│ ├── lean.exe # LeanCLR 命令行工具
│ ├── CoreTests.dll # 测试程序集
│ └── dotnetframework/ # .NET Framework 基础库
│ ├── mscorlib.dll
│ ├── System.dll
│ └── System.Core.dll
└── h5/ # HTML5 (WebAssembly) 平台 Demo
├── index.html # Demo 页面
├── lean.js # WASM 模块加载器(Emscripten 生成)
├── lean.wasm # LeanCLR WebAssembly 二进制文件
├── mscorlib.dll.bytes # .NET 核心库
├── System.dll.bytes # System 程序集
├── System.Core.dll.bytes # System.Core 程序集
└── CoreTests.dll.bytes # 测试程序集
在 win64 目录下运行 run.bat 脚本:
cd win64
run.bat预期输出:
leanclr\demo\win64>lean -l dotnetframework CoreTests -e test.App::Main
[debugger][level:0][info] Hello, World!
ok!
lean 是内嵌 LeanCLR 运行时的命令行工具,可直接加载并执行 .NET 程序集。
lean [options] <dll_name> [-- <dll_args>...]| 选项 | 说明 |
|---|---|
-l, --lib-dir <dir> |
添加 DLL 搜索路径(可多次使用);默认为当前目录 |
-e, --entry <entry> |
指定入口方法,格式为 Namespace.Type::Method |
-h, --help |
显示帮助信息 |
-- |
此后的参数将传递给目标 DLL |
rem 使用默认入口点运行程序集
lean MyApp
rem 指定搜索路径和入口点
lean -l dotnetframework -l libs CoreTests -e test.App::Main
rem 向目标 DLL 传递参数
lean -l . MyApp -- arg1 arg2 arg3由于浏览器安全策略,此 Demo 必须通过 HTTP 服务器访问。
方式一:使用 npx(推荐)
cd h5
npx serve .方式二:使用 Python
cd h5
python -m http.server 3000方式三:使用其他 HTTP 服务器
将 h5 目录设置为站点根目录。
在浏览器中打开 http://localhost:3000/(根据实际端口调整)。
- 页面加载后会自动初始化 WASM 模块并加载程序集
- 点击 "Initialize Runtime" 按钮初始化 LeanCLR 运行时
- 点击 "Run CoreTests.App::Main" 按钮执行示例代码
- 控制台将显示
Hello, World!
此 Demo 演示了在浏览器中运行 .NET 程序集的完整流程:
- 加载 WASM 模块 - 通过
createStartupModule()初始化 LeanCLR WebAssembly 模块 - 实现程序集加载回调 - 提供
load_assembly_file回调函数,使运行时能从 JavaScript 加载 .NET 程序集 - 预加载程序集 - 通过
fetch下载.dll.bytes文件并缓存 - 初始化运行时 - 调用
initialize_runtime初始化 CLR - 加载并执行程序集 - 调用
load_assemby加载目标程序集,然后调用invoke_method执行指定方法
支持所有支持 WebAssembly 的现代浏览器(Chrome、Firefox、Safari、Edge)。
- 打开
test/Tests.sln,修改CoreTests项目中的App::Main或其他代码 - 构建生成
CoreTests.dll(Debug 或 Release) - Win64:将输出的
CoreTests.dll复制到win64目录,替换原有文件 - H5:将输出的
CoreTests.dll重命名为CoreTests.dll.bytes并复制到h5目录 - 重新运行 Demo 验证结果
- LeanCLR 覆盖了 ECMA-335 的大部分特性;包括异常和反射在内的复杂 C# 代码均可正常工作,只要不调用操作系统特定的 API
- 目前仅
System.Diagnostics.Debugger::Log可用于日志输出;请勿使用Console.WriteLine或UnityEngine.Debug.Log - Win64:仅验证了 .NET Standard 2.x / .NET Framework 4.x 核心库;如需额外 DLL,请使用
-l <path>添加搜索路径
请参阅 LICENSE 文件。