# XFESystem C# 重构 工作分支:`codex/csharp-system`。解决方案:根目录的 `XFESystem.slnx`。用户已明确选择 C# 裸机内核,先实现 .NET 10 中间交互层,完整 .NET Framework 4.8 留待后续兼容阶段。 当前第五轮预览(Preview5)加入有限 CSS 布局与绘制、外部 classic 脚本/样式、DOM/browser 事件及真实 Monaco 核心编辑器。最终宿主 575 项(含 Browser184)、私有运行时 36 项、默认生产 Monaco11 项均通过;真实原生浏览器在 1 GiB / 4K / 200% 配置通过 8 组,同镜像 TCG 桌面 28 项通过。完整 WHPX51 组验收也已通过,全部最终范围以 `Validation/CSharpBrowserPreview5-20261014-Final.json` 为准。发行入口为 `dist/XFESystem-CSharp-Preview5-Final-20261014.zip`,Preview4 及此前包、日志和报告保留,不覆盖历史结果。 ## 实现结构 | 项目 | 职责 | | --- | --- | | `Source/XFESystem.Kernel` | C# NativeAOT 内核入口、实际 framebuffer、键鼠适配及控制台平台接口 | | `Source/XFESystem.Core` | `X:\System`、`X:\Programs`、`X:\Users` 命名空间与明确的 RAM-live 文件后端 | | `Source/XFESystem.Desktop` | 桌面、窗口拖动/缩放/最大化、任务栏与快捷键、文件浏览、文本编辑、图形终端、EDID 时序解析及脏帧调度 | | `Source/XFESystem.Console` | 增量 ANSI 终端、16/256/24 位色、光标与中文宽字符模型 | | `Source/XFESystem.ConsoleDemo` | 使用真正 `XFEExtension.NetCore.XFEConsole 2.6.0` 的共享演示业务 | | `Source/XFESystem.ManagedRuntime` | 读取真实托管 PE/IL 的受限解释执行层及 Console/XFEConsole 绑定 | | `Source/XFESystem.Documents` | 指定网站的 Markdig/HtmlSanitizer 管线与真实离线高亮、数学和流程图资源 | | `Source/XFESystem.Browser` | AngleSharp HTML、Jint JavaScript、有限 DOM/事件循环、CSS 级联/布局/绘制与输入命中、受控外部资源及真实 Monaco core | | `Samples` | 独立编译的控制台、托管 IL 和浏览器组件示例 | | `Tools/CSharpBoot` | Windows 原生构建、C# GPT/FAT32 镜像生成及独立 QEMU 验收 | 内核与用户界面使用 C#。当前复用固定版本 **Cosmos 3.0.94** 的 NativeAOT 构建/运行时 plugs、GC、底层驱动与 Limine 启动链,遵守 BSD-3-Clause 等依赖许可证;版本、源码归档 SHA256 与复用范围见 `Tools/CSharpBoot/Dependencies.json`。这是运行于裸机的托管系统原型,不使用 Linux 或 Windows 作为来宾内核。构建时的 `linux-x64` RID 用于选择 System V/ELF 目标,宿主编译器运行于 Windows。 旧 Rust 源码已从当前工作树删除;Git 历史、旧验收记录及发行包保留,供历史回查。它们不证明新的 C# 内核具有相同的驱动、进程隔离或持久化能力。 ## .NET 兼容范围 `XFESystem.Net10.ConsoleIL.v1` 从独立编译的 `net10.0` PE 程序读取入口、元数据与 IL,再解释执行。它不会借助 Windows 的 `Assembly.Load` 代跑程序。初期支持常量、Int32/Boolean 局部变量、有限整数运算、分支及显式白名单平台调用;支持 Console 文本、前背景颜色、重置与真实 XFEConsole.WriteLine 绑定。 解释器拒绝不支持的指令、签名、异常区、原生入口、P/Invoke、实例/泛型调用及未知平台接口。分支必须落在指令边界,执行步数、栈、字符串分配和终端输出均有上限。它仍是与内核同一地址空间的受限兼容组件,不具备独立进程隔离。 **这不是完整 CoreCLR/.NET 10 安装环境,也不是 .NET Framework 4.8。** 不能据此承诺任意现成 .NET 程序、WPF、WinForms、动态库、反射或 NuGet 包均能运行。完整运行时、独立用户地址空间和系统库兼容仍需要继续移植。 当前上游裸机异常展开还存在 `finally` 清理未完整执行的缺口,因此也不能声称具有完整 .NET 异常语义。网络句柄、浏览器同步锁和 XFEConsole 的全局重定向已针对本项目路径显式处理清理;第三方库内部的所有异常资源路径尚未全面保证。某次来宾 JavaScript 错误或超时后仍能继续运行,只证明该验收覆盖的恢复路径,不证明通用程序集的异常兼容或资源回收已完成。受限 IL 执行层直接拒绝异常处理区,不将它们默默当作已支持。 Preview5 另在项目私有运行时副本中修补已核查的 Jint 清理路径和 GC 精确扫描栈尾截断出口,保留原 GC 与精确扫描,不修改全局 NuGet。活动 catch 记录容量从原来的 64 提高到 4096,并在真正超限时明确停止,避免继续进入已无法记录的处理器。原生 81 层重抛及异常后的 4 项恢复检查已通过,另有 321 帧独立闭包/父对象在两次强制 GC 后逐层校验通过。Jint 复杂嵌套异常区等未覆盖清理形态仍明确排除;这些补丁不是通用 .NET 异常/GC 兼容声明。 两处分配失败防护在最终分配仍返回空指针时输出 `XFE_RUNTIME_OOM` 并停止整个来宾,避免把无效对象继续交给托管代码;这不是页面恢复或进程级 OOM 隔离。独立 512 MiB 来宾负测申请 1 GiB ArrayBuffer 后,验证该标记、无 CPU 页错误及 QMP 清理通过。 早期完整 AMD Monaco 的 512 MiB 压力错误、4K core 首次事件泵的 `ArgumentNull(destinationArray)` 和随后 OOM 日志均保留。最终 512 MiB 仍在编辑申请 46,368 字节时失败,**Monaco512MiB 目标未达成**;本轮真实 Monaco 使用 1 GiB 验收。2 GiB 对照、宿主成功及局部运行时回归不推广为 512 MiB 通过。 ## 桌面、文件和网页 开机进入桌面。界面参考 `XFEToolBox` 的实际 XAML,采用浅色卡片、圆角窗口和 XFE 蓝色强调;Settings 可切换 Light/Dark、预设强调色和 `#RRGGBB`,Dark 延续深蓝终端配色。Files、Editor、Browser、Terminal、Settings 可从桌面入口打开;顶部系统栏已移除,标题右侧仅最小化与关闭按钮,双击标题仍最大化/还原,标题可拖动,右下角可调整大小。最大化与贴靠使用扣除底部任务栏后的工作区,任务栏用于切换、最小化和恢复窗口。抗锯齿标题图标与拖动/缩放入口提供悬停、按下及连续反向动画。 Win 打开开始菜单;Win+E、Win+D、Win+方向键提供文件管理器、显示桌面、贴靠及最大化/还原入口。Alt+Tab 按稳定的最近使用顺序切换窗口,Shift 反向,松开 Alt 结束该轮;Alt+F4 请求关闭。QEMU 必须获得输入焦点;宿主 Windows 是否截获组合键仍取决于虚拟机的键盘捕获状态。编辑器继续支持定位与方向键编辑、Delete/Backspace、Ctrl+S 保存及 F5 预览;有未保存修改时关闭会提示,Escape 明确丢弃并关闭。 箭头光标在交点加粗并向端点渐细,拖尾缩短,保留更明显的蓝色光晕;文本输入区和调整窗口大小时显示对应光标。9 个应用与文件类型图标由内置 Imagegen 分别生成,原始透明 PNG、提示词、来源和哈希保存在 `assets/DesktopIcons`,应用入口、任务栏、文件列表等使用同一套编译资产。文件窗口打开 `.dll` 或 `.exe` 时通过明确的托管程序集适配器交给受限 IL 执行层,不借用宿主启动程序。系统路径使用 Windows 风格及 PascalCase 的系统目录名,用户文件名称不强制改写。 当前工作区是 **RAM live**:文件存于内存,关机后消失,保存提示不会伪称已落盘。新 C# 持久化存储尚未取代旧 Rust ext2 实现。 Terminal 当前用于程序集输出和演示,尚未迁入旧 Shell 的命令解释、管道和后台作业;文件操作通过图形文件管理器完成。 浏览器组件真实解析 HTML、执行受限 JavaScript 并更新显式 DOM。Preview5 使用本项目的 CSS 级联、盒布局、display list、字体绘制和命中测试,呈现页面背景、文字、边框与实际编辑区;没有嵌入 Chromium、Edge、宿主 WebView 或通过宿主浏览器代跑页面。地址栏或 Ctrl+L 选择地址,输入替换后按 Enter 导航。HTML/DOM 解析使用 AngleSharp 1.7.1,脚本使用 Jint 4.11.0,第三方来源和许可证保留。 CSS 支持有界选择器匹配与级联、继承、盒模型、块/行内布局、单行 flex、absolute/fixed 定位、颜色/字体/溢出裁切,以及有限二维平移;不支持完整 Grid、flex 换行、任意变换或全部现代 CSS。有界解析缓存复用未变化的样式,style/link 内容、顺序或相关 DOM 变化时失效,动态修改仍参与重新布局,避免每帧重复解析全部 Monaco CSS。布局尺寸同时用于 `getBoundingClientRect`、输入命中和 Range/caret 位置,未支持的属性或选择器保留诊断。 外部 classic 脚本和样式经受控资源加载器读取,检查 MIME、字数/数量预算、重定向和协议降级;不支持原生 `