# 项目私有 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](https://github.com/sebastienros/jint/blob/v4.11.0/Jint/Native/Function/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`。相同输入和有效收据可幂等重试,收据缺失、哈希改变、未标记非原始输入或非私有路径会被拒绝。 ```powershell dotnet test Tests/XFESystem.JintCleanupPatch.Tests/XFESystem.JintCleanupPatch.Tests.csproj -c Release --artifacts-path <独立绝对路径> ``` 测试包含原异常清理行为、实际加载宿主 DLL 标记与哈希、重复绑定、Proxy、接收者与参数、构造和 `instanceof`、名称和长度、非函数拒绝、原始包不变以及双补丁最终收据。