# oh_dotnet **Repository Path**: lightsever/oh_dotnet ## Basic Information - **Project Name**: oh_dotnet - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-14 - **Last Updated**: 2026-06-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # dotnetsimple 在 HarmonyOS(aarch64,HongMeng Kernel 1.12.0)上从零移植 .NET CoreCLR,最终对标 mono dotnet 的运行覆盖度。 > **当前状态(2026-06-26)**: > - **JIT**:完整 .NET runtime 端到端工作。源码 build 出 `libcoreclr.so` + `dotnet` muxer + ICU 75.1 + OpenSSL 3.4.0 > - **NativeAOT**:`dotnet publish -r ohos-arm64 -p:PublishAot=true` 端到端可用,SDK-level targets override 绕过 NuGet 包 ## 快速安装 本仓库是源码仓库,**不直接安装**。先 clone install 仓库并执行安装脚本: ```sh # 1. clone install 仓库(与 oh_dotnet 同级) cd ~/Documents/git git clone install-dotnet-harmonyos # 2. 执行安装脚本(装到 ~/.dotnet_oh,wrapper 命令 dotnet) cd install-dotnet-harmonyos ./install-dotnet-harmonyos.sh # 或装副本(~/.dotnet_oh_ab,wrapper 命令 dotnet_ab,用于本仓库调试) ./install-dotnet-harmonyos.sh --specname ab ``` 安装脚本会: - 下载官方 .NET 10.0.9 SDK(linux-musl-arm64) - 用本仓库源码 build 的 OHOS PAL `.so` 覆盖官方 - 部署 ICU 75.1 + OpenSSL 3.4.0 - 部署 NativeAOT SDK patch(ILC + 静态库 + targets) - 对所有 ELF 自签名 - 写 wrapper `~/bin/dotnet`(或 `~/bin/dotnet_ab`) 装完后 `dotnet --info` / `dotnet_ab --info` 验证。 ## 快速链接 | 文档 | 内容 | |------|------| | [docs/status.md](docs/status.md) | 里程碑进度表 + 各阶段当前状态 | | [docs/toolchain.md](docs/toolchain.md) | 工具链路径、版本、sysroot 缺口 | | [docs/build.md](docs/build.md) | 如何在 OHOS 设备上构建 dotnet/runtime | | [docs/run.md](docs/run.md) | 如何跑 .NET 程序(wrapper / shim / 签名) | | [docs/architecture.md](docs/architecture.md) | PAL / CoreCLR / corerun 结构概览 | | [docs/decisions.md](docs/decisions.md) | 关键技术决策(JIT 优先、源码构建、不子集化…) | | [docs/known-gaps.md](docs/known-gaps.md) | 已知未解决问题 / 风险 | | [docs/topic-index.md](docs/topic-index.md) | 所有 `yyyymmdd_*/` 专题目录索引 | | [docs/aitask.md](docs/aitask.md) | AOT 专题总进度 | | [docs/20260626_dotnet-publish-aot-ohos/plan.md](docs/20260626_dotnet-publish-aot-ohos/plan.md) | NativeAOT SDK-level 集成方案 | | [CLAUDE.md](CLAUDE.md) | 工作约束、构建惯例、流程规范(必读) | ## 一句话进度 | 阶段 | 状态 | |------|------| | M1 工具链验证 | ✅ 2026-06-14 | | M2 PAL 静态库 | ✅ 2026-06-15 | | M3 上游源码 clone | ✅ 2026-06-15 | | M4 源码构建 + Hello World | ✅ 2026-06-17 | | M5 GC + 多线程 | ✅ 6/6(M11 修了 si_pid=0,并发 GC stop-the-world 也通)| | M6 文件 IO + 反射 | ✅ 7/7 | | M7 JIT 复杂 IL | ✅ 7/7(M10 FP chain 替换 DWARF,try/catch 全通)| | M8 网络栈 | ✅ 6/6(含 HTTPS / TLS 1.3 via OpenSSL 3.4.0)| | M9 异常路径诊断 | ✅ 定位到 DWARF unwinding 不可靠 | | M10 异常路径修复 | ✅ 2026-06-17,FP chain 替换 PAL_VirtualUnwind | | M11 信号注入修复 | ✅ 2026-06-18,SIGRTMIN+1 + si_pid=0 | | M12 ICU 75.1 集成 | ✅ 2026-06-18,中文化 + 规范化 | | M13 OpenSSL 3.4.0 集成 | ✅ 2026-06-18,AES/ECDsa/TLS 1.3 端到端 | | M14 dotnet muxer (Path C) | ✅ 2026-06-18,完整 host 从源码 build | | **NativeAOT 端到端** | ✅ 2026-06-26,SDK-level targets + ILC + lld | | 后续 | SDK subset / apphost 单文件 / OHOS app 打包 | ## 跑一个 .NET 程序(JIT) `dotnet_d2` 是包装好的全局命令(详见 [CLAUDE.md](CLAUDE.md#全局命令dotnet_d2跑我们源码-build-的-runtime)): ```sh # 编译(用 RC.2 SDK) cd tests/ dotnet build -c Release # 拷 dll 到 runtime 目录 cp bin/Release/net10.0/linux-arm64/.dll tests/hello_m4/runtime/ cp bin/Release/net10.0/linux-arm64/.runtimeconfig.json tests/hello_m4/runtime/ # 跑(默认走 dotnet muxer;含 ICU/OpenSSL/LD_PRELOAD shim) cd tests/hello_m4 dotnet_d2 runtime/.dll dotnet_d2 --info # Host 10.0.7-dev / Commit 418c9747e2 ``` 输出 `Hello, World!`,exit=0。 ## 跑一个 NativeAOT 程序 ```sh # 1. 安装 SDK patch(在 oh_dotnet_aot repo 根目录) tools/install-nativeaot-ohos.sh # 2. 在任意 csproj 上 publish cd tests/min_main_args dotnet publish -r ohos-arm64 -p:PublishAot=true -c Release # 3. 直接运行(无需 LD_LIBRARY_PATH) ./bin/Release/net10.0/ohos-arm64/publish/min_main_args hello world 42 # 输出: args.Length=3 / hello / world / 42 ``` **关键技术**: - SDK-level targets override:绕过 NuGet 包,直接使用仓库自带的 ILC/CoreLib/native libs - RPATH 在 link time 设置:ELF 自带 ICU/OpenSSL 路径 - 无需 AppendExFrame patch:ILC 直接生成无条件跳转(实测 throw/catch 正常工作) ## 协作 - 文档全部使用**简体中文** - 代码注释优先英文(与上游一致),关键 PAL 决策处可用中文标注 - 工作流程详见 [CLAUDE.md](CLAUDE.md)