Skip to content

Releases: BepInEx/HarmonyX

Release v2.12.0

08 Feb 16:47
Compare
Choose a tag to compare

What's Changed

  • Fix for unintentional removal of some leave instructions by @kohanis in #96
  • Fix invalid file name when dumping compiler-generated methods by @Meivyn in #99
  • CreateAndPatchAll - use a counter + target name as default ID instead of a GUID by @ManlyMarco in #103
  • Add HarmonyOptional attribute by @ManlyMarco in #105

New Contributors

Full Changelog: v2.11.0...v2.12.0

Release v2.11.0

19 Jan 14:21
4148feb
Compare
Choose a tag to compare
Release v2.11.0 Pre-release
Pre-release

What's Changed

  • For log file open with full share access, if user sets "HARMONY_LOG_FILE" append obsolete to old FileLog by @mitchcapper in #83
  • Update MonoMod to 25.0.0, add Harmony 2.3 features by @Windows10CE in #79
  • Fix AccessTools.GetTypesFromAssembly sometimes returning an array with a null in it by @ManlyMarco in #80
  • Improve CodeMatcher exceptions on invalid positions by @ManlyMarco in #85
  • Update MonoMod.RuntimeDetour to 25.1 by @ManlyMarco in #100

New Contributors

Full Changelog: v2.10.2...v2.11.0

Release v2.10.2

29 Aug 22:13
Compare
Choose a tag to compare

Changelog

Full Changelog: v2.10.1...v2.10.2

Release v2.10.1

13 Nov 17:51
Compare
Choose a tag to compare

Changelog

  • Print out lastError in ThrowIfInvalid (#48)

Release v2.10.0

24 Mar 19:33
Compare
Choose a tag to compare

Changelog

  • Merged code from upstream up to 6006140 (see Harmony changelog)

    • Important: The merge brings binary incompatibilities to CodeMatch class. If you distribute HarmonyX in games or mod loaders, please test for any regressions and apply shims where appropriate

      Starting this version, CodeMatch now inherits CodeInstruction. Because of this, some fields (labels, blocks) have been removed from CodeMatch as they are now provided by CodeInstructon. Any CodeMatch uses where fields are accessed directly will be binary-incompatible. However, this should generally be fairly rare: analysing a few dozen CodeMatch class uses across different GitHub projects revealed that most developers only use the new CodeMatch constructor, which hasn't been altered. Most use cases of CodeMatch should still be binary-compatible with HarmonyX 2.10.

    • All nested classes in the Code class have also been annotated with the [EditorBrowsable(EditorBrowsableState.Never)] attribute to prevent custom classes from cluttering most IDEs' code completion.

  • Fix HARMONY_NO_LOG environment variable is not respected for file logger

  • Fix HarmonyEmitIL attribute not working on methods with certain branches

  • Fix handling methods that include throws OpCode on mono

  • Fix net35 builds not working on CoreCLR because of AccessTools.PrepForRemoting fix

  • Improve exception messages when applying patches (warn about missing target method or patch method not being static)

  • Bump MonoMod version to 22.3.23.4 (changelog)

Release v2.9.0

02 Feb 17:32
Compare
Choose a tag to compare

Changelog

  • CodeMatcher: Update to partially match current upstream codebase
    • Adds some new overloads for matching
  • CodeMatcher: Add implicit cast to CodeMatch from OpCode to simplify simple matches
  • Harmony: Implement IDisposable interface implicitly
    • Allows writing temporary patches with using syntax
    • Disposing of Harmony will call UnpatchSelf()
  • Fix cases where handler block didn't have an explicit end (#46)
  • Add HarmonyEmitIL attribute to dump patches as DLL (Documentation)
  • HarmonyManipulator: Add new overload for simplified patching
  • Updated MonoMod.RuntimeDetour to 21.12.13.1 (changelog)

Release v2.8.0

10 Jan 19:41
Compare
Choose a tag to compare

Changelog

  • Merged code from upstream up to 53d8c7b
    • See Harmony 2.2 changelog for some new features
    • CodeInstructions.CallClosure calls original Transpilers.EmitDelegate
    • Fix patching some methods in global type (e.g. <Module>
  • Updated MonoMod to 22.01.04.03 (changelog)

Release v2.7.0

21 Dec 07:06
Compare
Choose a tag to compare

Changelog

  • @ErisApps: Add global flag to disallow global UnpatchAll behavior (#40)
  • @ErisApps: Add static UnpatchAll and UnpatchID (#41)
    • This marks old harmony.UnpatchAll(string) as obsolete. Any developers should migrate to using harmony.UnpatchSelf() or the new overloads. See wiki for more details.
  • Merged upstream up to 5bd23f3
  • Updated MonoMod.RuntimeDetour to 21.12.13.1 (changelog)

Release v2.6.1

29 Nov 21:22
Compare
Choose a tag to compare

Changelog

  • @ManlyMarco: Improved documentation for various Harmony attributes
  • Fixed HarmonyWrapSafe attribute when not using it as the last attribute

Release v2.6.0

28 Nov 10:30
Compare
Choose a tag to compare

Changelog

  • Updated MonoMod to 21.11.11.1 (changelog)
  • Fixed leave, leave.s, endfinally and endfilter being duplicated when generated patched method code
    • This also fixes certain cases where inserting IL right after exception blocks caused the IL to be skipped over in generated patch
  • Added MethodType.Enumerator method type to make transpiling enumerators (e.g. Unity coroutines) easier (thanks, @ManlyMarco!)