Harmony Versions Save

A library for patching, replacing and decorating .NET and Mono methods during runtime

v2.3.2.0

3 weeks ago

What's Changed

v2.3.1.1

1 month ago

This releases fixes a regression for .Net Standard projects

v2.3.1.0

1 month ago

v2.3.1 fixes:

  • Dependency problem / duplicate type errors that we introduced with v2.3
  • Better dead code handling #584
  • new Lib.Harmony.Ref for projects targeting .NET Standard 2.0

v2.3.0.1-thin

1 month ago

This update updates Harmony Thin only and makes the dependency on MonoMod.Core public so it is included in transitive dependencies. No other changes.

v2.3.0.0

1 month ago

We have been preparing and testing this for months and I want to specially mention the the help of our HUGE community on this release. Harmony is downloaded over 800 times a day and has over 1.6 million downloads on Nuget and a Discord server with over 2100 members.

New core engine Harmony 2.3 now uses MonoMod.Core v1.1 (part of https://github.com/MonoMod) which is a rewrite of the low level back-end for patching .NET methods.

Support for newer .NET versions .NET 7 and .NET 8 support is finally here

Tests via GitHub Actions Harmony is now tested on Azure and GitHub and thus we can start testing macOS and other fancy combinations: https://github.com/pardeike/Harmony/actions/workflows/test.yml

Fat and Thin versions Harmony is now released in two packages on nuget: Lib.Harmony and Lib.Harmony.Thin. The thin version does not embed dependencies and thus allows you to manage them yourself. The normal version embeds them as internal types and works as usual as a standalone dll. https://www.nuget.org/packages/Lib.Harmony https://www.nuget.org/packages/Lib.Harmony.Thin

Changes

  • Support GenericInstance types in inline method signatures 1960f575bddd04e9de617aa6af8b284c8383bb30
  • adds better detection for methods that end in dead code 7b5158aefb1aba88827fa598d5e37e67d1a58380
  • Merge pull request #565 from Zetrith 03b642613f00ac8a7290df824785f07a357c6852
  • Error in exported Godot Engine build when attempting to patch method #562
  • Regression with methods ending in throw + ret e63e183e315c30a4cc44db93a9484cd77d9492a6
  • fixes a bug where Harmony calls TargetMethods() always twice 7ab508c95e336619d0b77eb0918d74ac10fbcc2c
  • Native async patching is not available in .NET Standard or .NET #533
  • adds IEnumerable<CodeInstruction>.Matches() b9206db8abbe670f88e1fbe4a71f0986765f05ff
  • Uses PlatformTriple.Current.GetIdentifiable for a user submitted MethodInfo
  • fixes more unix tests
  • patches Assembly.GetExecutingAssembly internally
  • Improves http_client tests cda2226d2a9547c24f84521cfd3a894aea3a62f4
  • adds useful linux test shortcut c2586e7d0b2e2a73333b928eb0043e7c8542268a
  • adds null/zero return clarifcations for TargetMethod/s #544
  • fixes CodeMatch(()=>... 7e4183ee30b886ec2f862412a70b92d2a16622cf
  • Documentation Auxiliary Methods - Attribute spelling issue. Plus logic fix. #557
  • adds InnerTypes() and extensions for AccessTool methods on type Type d916a300d1e13b171b9a33fcf5dd7eab292d13ca
  • code cleanup, net8.0, optional ret code for methods ending in throw

Additions

  • adds Mono.Cecil.ByReferenceType, Mono.Cecil.GenericInstanceMethod, Mono.Cecil.GenericInstanceType, Mono.Cecil.TypeSpecification and Mono.Cecil.Cil.OpCodes to ForwardingAttributes
  • You can now patch methods like ref SomeType Test() by using ref RefResult<SomeType> __resultRef

Huge THANK YOU to all contributors (a lot of them new):

SPECIAL THANKS

  • @Aragas who added 10 PR's in various areas
  • @Banane9 for their 3 PR's

Full Changelog

https://github.com/pardeike/Harmony/compare/v2.2.2.0...v2.3.0.0

v2.3-prerelease.7

2 months ago

This release is just like prerelease.6 but build with the new thin/fat mechanics. No new features or fixes were added.

v2.3-prerelease.6

2 months ago

Fixes the following issues:

  • Support GenericInstance types in inline method signatures 1960f575bddd04e9de617aa6af8b284c8383bb30
  • adds better detection for methods that end in dead code 7b5158aefb1aba88827fa598d5e37e67d1a58380
  • Merge pull request #565 from Zetrith 03b642613f00ac8a7290df824785f07a357c6852

v2.3-prerelease.5

3 months ago

Fixes

  • Error in exported Godot Engine build when attempting to patch method #562
  • Regression with methods ending in throw + ret e63e183e315c30a4cc44db93a9484cd77d9492a6

v2.3-prerelease.4

3 months ago

Changes

  • updates MonoMod.Core to v1.1.0-prerelease.1
  • fixes Native async patching is not available in .NET Standard or .NET #533
  • adds IEnumerable<CodeInstruction>.Matches() [b9206db8abbe670f88e1fbe4a71f0986765f05ff]
  • Uses PlatformTriple.Current.GetIdentifiable for a user submitted MethodInfo
  • fixes more unix tests
  • patches Assembly.GetExecutingAssembly internally
  • Improves http_client tests [cda2226d2a9547c24f84521cfd3a894aea3a62f4]
  • adds useful linux test shortcut [c2586e7d0b2e2a73333b928eb0043e7c8542268a]
  • adds null/zero return clarifcations for TargetMethod/s #544
  • fixes CodeMatch(()=>... [7e4183ee30b886ec2f862412a70b92d2a16622cf]
  • Documentation Auxiliary Methods - Attribute spelling issue. Plus logic fix. #557
  • adds InnerTypes() and extensions for AccessTool methods on type Type [d916a300d1e13b171b9a33fcf5dd7eab292d13ca]
  • code cleanup, net8.0, optional ret code for methods ending in throw

For the main description see v2.3-prerelease.2