Skip to content

Harmony 3.0.0-rc.4

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Oct 02:13
  • Fix the patch-installation performance regression reported in #783. Ordinary CoreCLR patches, exception handlers, finalizers and dynamic callbacks use direct dynamic methods without loading replacement or callback-proxy assemblies.
  • Preserve the exact exception table and calculate the complete evaluation-stack depth, including returning calli instructions. Ordinary patches and Infixes continue to share the same patch-construction pipeline and detour mechanism.
  • Preserve exact runtime callback identities and release retired dynamic replacements without retaining their callbacks in Harmony's method lookup.
  • Keep assembly generation for explicit diagnostic output and runtime limitations, including custom-modified call-site signatures before .NET 10. Reduce dependency-name allocation on this path while preserving quoted assembly names and ambiguity checks.
  • Add .NET 11 support, verified with RC3, and embed MonoMod.Core 1.4.0-prerelease.1 for all targets. Native async methods remain unsupported and throw NotSupportedException when patched or reverse-patched. Ordinary Task-returning methods and compiler-generated async state machines remain supported.
  • Known issue on .NET 11: callers compiled with runtime-async, including the .NET 11 runtime libraries, call the async variant of an ordinary Task-returning method, which a patch does not reach. With the embedded MonoMod, a variant compiled after the patch corrupts code and can crash the process (MonoMod#344, fix proposed in MonoMod#345). Harmony logs the bypass when Harmony.DEBUG is on.