Skip to content

focus-creative-games/leanclr-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

中文 | English

LeanCLR Demo

本项目是 LeanCLR 的 Demo 项目,提供 Win64 和 H5(WebAssembly)两个平台的运行示例。

LeanCLR 介绍

LeanCLR 是一个面向全平台的精益 CLR(Common Language Runtime)实现。LeanCLR 的设计目标是在高度符合 ECMA-335 规范的前提下,提供更紧凑、易嵌入、低内存占用的运行时,实现对移动端、H5 与小游戏等资源受限平台的友好支持。

Demo 目录结构

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 Demo

快速开始

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 工具用法

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

H5 Demo

快速开始

由于浏览器安全策略,此 Demo 必须通过 HTTP 服务器访问。

1. 启动 HTTP 服务器

方式一:使用 npx(推荐)

cd h5
npx serve .

方式二:使用 Python

cd h5
python -m http.server 3000

方式三:使用其他 HTTP 服务器

h5 目录设置为站点根目录。

2. 访问页面

在浏览器中打开 http://localhost:3000/(根据实际端口调整)。

3. 运行 Demo

  1. 页面加载后会自动初始化 WASM 模块并加载程序集
  2. 点击 "Initialize Runtime" 按钮初始化 LeanCLR 运行时
  3. 点击 "Run CoreTests.App::Main" 按钮执行示例代码
  4. 控制台将显示 Hello, World!

工作原理

此 Demo 演示了在浏览器中运行 .NET 程序集的完整流程:

  1. 加载 WASM 模块 - 通过 createStartupModule() 初始化 LeanCLR WebAssembly 模块
  2. 实现程序集加载回调 - 提供 load_assembly_file 回调函数,使运行时能从 JavaScript 加载 .NET 程序集
  3. 预加载程序集 - 通过 fetch 下载 .dll.bytes 文件并缓存
  4. 初始化运行时 - 调用 initialize_runtime 初始化 CLR
  5. 加载并执行程序集 - 调用 load_assemby 加载目标程序集,然后调用 invoke_method 执行指定方法

浏览器兼容性

支持所有支持 WebAssembly 的现代浏览器(Chrome、Firefox、Safari、Edge)。


测试自定义代码

测试流程

  1. 打开 test/Tests.sln,修改 CoreTests 项目中的 App::Main 或其他代码
  2. 构建生成 CoreTests.dll(Debug 或 Release)
  3. Win64:将输出的 CoreTests.dll 复制到 win64 目录,替换原有文件
  4. H5:将输出的 CoreTests.dll 重命名为 CoreTests.dll.bytes 并复制到 h5 目录
  5. 重新运行 Demo 验证结果

注意事项

  • LeanCLR 覆盖了 ECMA-335 的大部分特性;包括异常和反射在内的复杂 C# 代码均可正常工作,只要不调用操作系统特定的 API
  • 目前仅 System.Diagnostics.Debugger::Log 可用于日志输出;请勿使用 Console.WriteLineUnityEngine.Debug.Log
  • Win64:仅验证了 .NET Standard 2.x / .NET Framework 4.x 核心库;如需额外 DLL,请使用 -l <path> 添加搜索路径

许可证

请参阅 LICENSE 文件。

About

win64 and h5 demo for LeanCLR.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors