项目私有 Jint 补丁
固定输入为 Jint 4.11.0 / net10.0 原始程序集 SHA256
acf8a1a9f98aa771c95c2b15b9b58f21de8b77f027e2a8d5ca92597e87752d9d。
工具只改项目私有 obj 副本,不修改全局 NuGet 包。
默认模式保留 V2 异常清理补丁:将可支持的 finally 清理镜像到 catch/rethrow,并保留正常 finally 路径和重复进入保护;未支持的嵌套异常形状在收据中明确列出。
--bind-only 为 Windows 宿主项目提供独立的可调用目标修复。原版本 BindFunction 自身实现 ICallable,却把其绑定目标强制转为 Function,导致再次绑定和绑定 Proxy 后调用失败。修复只将实际调用分派改为 ICallable.Call;instanceof 同样通过可表达这些对象的 ObjectInstance / JsValue.OrdinaryHasInstance 分派。原绑定参数、接收者、构造和异常路径保留。
原实现可查 Jint 4.11.0 BindFunction.cs。
根 Directory.Build.targets 导入 HostJint.targets,在每个实际宿主可执行文件或测试的复制阶段完成后,将该宿主的 Jint 复制到独立 obj/XfeJintHost、验证固定源哈希、校验并修正 IL,再复制回该项目自己的输出目录。Jint.dll.XfeBind.json 记录真正输出程序集的 SHA256。依赖编译引用不改,Interop 限制不放宽。
--bind-and-cleanup 用于 Cosmos 原生编译私有副本,先校验固定版本与方法形状,再应用原 V2 清理和相同的可调用目标修复。最终 .XfeCleanup.json 与 .XfeBind.json 都绑定实际最终 DLL 的 SHA256;前者增加 BoundCallablePatchVersion: 1。相同输入和有效收据可幂等重试,收据缺失、哈希改变、未标记非原始输入或非私有路径会被拒绝。
dotnet test Tests/XFESystem.JintCleanupPatch.Tests/XFESystem.JintCleanupPatch.Tests.csproj -c Release --artifacts-path <独立绝对路径>
测试包含原异常清理行为、实际加载宿主 DLL 标记与哈希、重复绑定、Proxy、接收者与参数、构造和 instanceof、名称和长度、非函数拒绝、原始包不变以及双补丁最终收据。